#python #loops #random #iteration
#python #циклы #Случайный #итерация
Вопрос:
У меня есть код python, который написан ниже. Что меня беспокоит, так это большое число, которое я получаю в качестве вывода в массиве rhot
. Это не может быть правдой, поскольку val
в основном это небольшое число, и эти небольшие числа дополнительно подавляются экспоненциальным коэффициентом, как в строке
rhot[i, j, k] = (rhot[i, j, k] val[j, k, l] *
np.exp(-(vlist[i] - velz[j, k, l]) ** 2 / (2 * beta)))
Кто-нибудь знает, почему я получаю большие числа в качестве выходных rhot
данных?
import numpy as np
import random
n = 6
val = np.empty((n, n, n)) # produces n*n*n empty matrix
for i in range(0, n - 1):
for j in range(0, n - 1):
for k in range(0, n - 1):
val[i, j, k] = random.lognormvariate(0, 1)
# produces lognormal random numbers with mean 1 and standard deviation 1
velz = np.empty((n, n, n))
for i in range(0, n - 1):
for j in range(0, n - 1):
for k in range(0, n - 1):
velz[i, j, k] = random.normalvariate(0, 1)
# produces normal random numbers with mean 1 and standard deviation 1
vmax = np.amax(velz) # maximum of flat velz array
vmin = np.amin(velz) # minimum
vlist = np.linspace(vmin, vmax, n)
# print(velz)
# print(val)
# print (vlist)
beta = 0.2
rhot = np.empty((n, n, n))
for i in range(0, n - 1): # index of velocity
for j in range(0, n - 1):
for k in range(0, n - 1):
for l in range(0, n - 1): # z index
rhot[i, j, k] = (rhot[i, j, k] val[j, k, l] *
np.exp(-(vlist[i] - velz[j, k, l]) ** 2 / (2 * beta))) # sums over 3rd dimension l, and stores the sum.
print(rhot)
Комментарии:
1. Почему бы вам не исследовать это самостоятельно? Просто печатайте каждый термин, когда появляется большое значение, и продолжайте отслеживать…
2. Я сделал, и это последняя строка, в которой rhot[i, j, k] идет первым, что приводит к возникновению больших чисел. Но этот термин явно не должен давать каких-либо больших чисел из-за экспоненциального подавляющего фактора (отрицательный член внутри экспоненты действительно должен делать экспоненциальный всегда меньше 1).
3. Ну, как я уже сказал, если он «должен», но не работает, тогда проверьте любые промежуточные результаты…
Ответ №1:
Я могу ошибаться, но когда я запускаю ваш код, я получаю небольшие значения. Может быть, вы видите такие вещи, как -3.53107108e-310
и путаете их с большими числами? Это:
-0.0 ... <307 '0's> ... 0353107108
Полный вывод см. Ниже:
[[[ 1.27490729e 000 2.48048100e 000 3.07058432e 000 7.30862963e-001
3.61289051e-002 0.00000000e 000]
[ 1.29285884e 000 9.53558990e-001 1.16462089e 000 6.18595057e-001
4.56208365e-001 0.00000000e 000]
[ 3.48843064e-002 3.51048158e-001 6.72572870e-001 1.44242671e-004
1.08715529e-002 0.00000000e 000]
[ 1.34866696e 000 3.61798504e-002 4.94111513e-001 1.67366765e-001
1.45956417e 000 0.00000000e 000]
[ 2.11027716e 000 1.15784556e 000 6.16183788e-002 1.58361518e-001
5.75876010e-001 0.00000000e 000]
[ 0.00000000e 000 -2.22731705e-310 7.48734566e-315 7.48735151e-315
8.63509807e-312 0.00000000e 000]]
[[ 8.71788238e-001 8.75201841e 000 4.64974371e 000 2.59647886e 000
1.16994333e 000 0.00000000e 000]
[ 1.19599140e 000 8.74687167e-001 2.50158015e 000 2.75257757e 000
9.92597288e-001 0.00000000e 000]
[ 1.84015219e 000 1.12041236e 000 3.52262073e-001 1.49498067e-001
7.51724231e-001 0.00000000e 000]
[ 5.34739555e 000 2.75435540e 000 1.61068778e 001 1.59134588e 000
9.67835496e-001 0.00000000e 000]
[ 2.76116504e 000 2.03916401e 000 1.90723731e-001 2.82388640e 000
3.04602826e 000 0.00000000e 000]
[ 0.00000000e 000 -2.55325566e-310 7.48734566e-315 7.48735293e-315
8.63509811e-312 0.00000000e 000]]
[[ 5.24104854e 000 9.34017262e 000 4.00934108e 000 3.83152870e 000
1.62852403e 000 0.00000000e 000]
[ 3.32402433e-001 5.13142568e-001 1.56460377e 000 3.98199095e 000
3.10752863e 000 0.00000000e 000]
[ 7.32201046e 000 4.60614519e 000 6.65947236e-001 3.50609348e 000
2.43255192e 000 0.00000000e 000]
[ 1.20735878e 001 1.43430640e 001 1.13987763e 001 2.33564499e 000
4.11797274e 000 0.00000000e 000]
[ 4.56305322e 000 2.19230864e 000 2.04935419e 000 5.93349070e 000
1.34685870e 000 0.00000000e 000]
[ 0.00000000e 000 -2.87919425e-310 7.48734566e-315 7.48735435e-315
8.63509811e-312 0.00000000e 000]]
[[ 2.00871165e 000 1.07657987e 001 1.73466587e 000 5.37829126e 000
1.67186888e 000 0.00000000e 000]
[ 7.04409708e-001 9.18488325e-001 5.65912359e 000 3.07782156e 000
1.90251174e 000 0.00000000e 000]
[ 2.61090422e 000 1.76056043e 000 4.02183805e 000 5.16605380e 000
2.54000338e 000 0.00000000e 000]
[ 5.83011318e 000 3.84800152e 000 1.52000638e 000 2.67037387e 000
3.79550774e 000 0.00000000e 000]
[ 4.66619590e-001 4.10817751e 000 5.59173904e 000 1.44794224e 000
3.69302488e-001 0.00000000e 000]
[ 0.00000000e 000 -3.20513286e-310 7.48734566e-315 7.48734803e-315
8.63509813e-312 0.00000000e 000]]
[[ 1.79494277e-002 3.42477445e-001 1.69493310e-002 4.18988338e-001
2.47334739e 000 0.00000000e 000]
[ 1.06263981e-001 3.27704176e-001 6.35008094e-001 1.01981741e-001
8.65984592e 000 0.00000000e 000]
[ 1.19169164e-001 1.93839020e-001 1.63208875e 000 1.34924978e 000
2.13064890e 000 0.00000000e 000]
[ 7.85718993e-001 4.96021083e 000 3.80732389e-001 3.45316057e 000
2.54260569e-001 4.11408160e-304]
[ 3.11511258e-003 3.52866964e-001 2.00264974e 000 2.47368641e-002
6.53491661e-001 3.70335798e-318]
[ 0.00000000e 000 -3.53107108e-310 7.48734328e-315 7.48734249e-315
8.63509820e-312 0.00000000e 000]]
[[ 0.00000000e 000 -3.58539416e-310 7.48734407e-315 7.48734234e-315
8.63509829e-312 0.00000000e 000]
[ 0.00000000e 000 -3.63971726e-310 7.48734313e-315 7.48734866e-315
8.63509783e-312 0.00000000e 000]
[ 0.00000000e 000 -3.69404039e-310 7.48734392e-315 7.48734265e-315
8.63509828e-312 0.00000000e 000]
[ 0.00000000e 000 -3.74836347e-310 7.48734360e-315 7.48734249e-315
8.63509814e-312 0.00000000e 000]
[ 0.00000000e 000 -3.80268659e-310 7.48734439e-315 7.48734234e-315
8.63509327e-312 0.00000000e 000]
[ 0.00000000e 000 -3.85700970e-310 7.48734392e-315 7.48734249e-315
8.63509814e-312 0.00000000e 000]]]