-1
私は以下のようなPythonコードを持っています。私に迷惑をかけているのは、配列rhot
の出力として得られる大きな数です。 val
はほとんど少数であると私はrhot
用出力として大量に取得しています、なぜこれらの小さな数字はさらにラインなぜこのPythonコードは非常に大きな数値を生成していますか?
rhot[i, j, k] = (rhot[i, j, k] + val[j, k, l] *
np.exp(-(vlist[i] - velz[j, k, l]) ** 2/(2 * beta)))
のように指数因子によって抑制されているいずれかを知っていますので、これは本当のことはできませんか?
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)
なぜあなたは、これは自分で調べないのですか?大きな値が飛び出して追跡を続けると、すべての用語を印刷するだけです... – Julien
rhot [i、j、k]が最初に来て、大きな数を生じさせているのは最後の行です。しかし、この項は、指数関数的な抑圧因子(指数関数内の負の項は実際に指数関数を常に1未満にする必要がある)のために、明らかに大きな数を与えてはならない。 – konstant
まあ、私はそれは 'はすべきだが、しない場合は、中間の結果をチェック... – Julien