Ich habe einen Python-Code, der unten geschrieben ist. Was mich beunruhigt, ist die große Anzahl, die ich als Ausgabe in dem Array rhot
bekomme. Das kann nicht wahr sein, wie val
ist meist kleine Zahl und diese kleinen Zahlen werden durch den exponentiellen Faktor wie in derWarum produziert dieser Python-Code extrem große Zahlen?
rhot[i, j, k] = (rhot[i, j, k] + val[j, k, l] *
np.exp(-(vlist[i] - velz[j, k, l]) ** 2/(2 * beta)))
Hat jemand weiß Linie unterdrückt, warum ich für rhot
große Zahl als Ausgabe immer bin?
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)
Warum Sie dies nicht selbst untersuchen? Drucken Sie einfach jeden Ausdruck, wenn ein großer Wert herausspringt, und verfolgen Sie weiter ... – Julien
Ich tat, und es ist die letzte Zeile, in der rhot [i, j, k] zuerst kommt, die große Zahlen verursacht. Aber dieser Ausdruck sollte wegen des exponentiellen Verdrängungsfaktors offensichtlich keine großen Zahlen ergeben (negativer Ausdruck innerhalb der Exponentialfunktion sollte in der Tat exponentiell immer kleiner als 1 sein). – konstant
Nun, wie gesagt, wenn es "sollte", aber nicht, dann überprüfen Sie alle Zwischenergebnisse ... – Julien