Ich möchte acht Zufallszahlen innerhalb eines Bereichs (0 bis Pi/8) generieren, addieren sie zusammen, nehmen Sie den Sinus dieser Summe, und danach N-mal, nimm das mittlere Ergebnis. Nach dem Skalieren bekomme ich die richtige Antwort, aber es ist zu langsam für N > 10^6
, besonders wenn ich über N Versuche n_t = 25
mehr Male male! Ich bekomme derzeit diesen Code in etwa 12 Sekunden für N = 10^5
laufen, was bedeutet, dass es dauert 20 Minuten für N = 10^7
, die nicht optimal scheint (es kann sein, ich weiß es nicht!).Optimierung der Generierung einer großen Anzahl von Zufallszahlen mit Python 3
Mein Code ist wie folgt:
import random
import datetime
from numpy import pi
from numpy import sin
import numpy
t1 = datetime.datetime.now()
def trial(N):
total = []
uniform = numpy.random.uniform
append = total.append
for j in range(N):
sum = 0
for i in range (8):
sum+= uniform(0, pi/8)
append(sin(sum))
return total
N = 1000000
n_t = 25
total_squared = 0
ans = []
for k in range (n_t):
total = trial(N)
f_mean = (numpy.sum(total))/N
ans.append(f_mean*((pi/8)**8)*1000000)
sum_square = 0
for e in ans:
sum_square += e**2
sum = numpy.sum(ans)
mean = sum/n_t
variance = sum_square/n_t - mean**2
s_d = variance**0.5
print (mean, " ± ", s_d)
t2 = datetime.datetime.now()
print ("Execution time: %s" % (t2-t1))
Wenn jemand kann mir dabei helfen optimieren es wäre sehr willkommen!
Danke
Was ist das Endziel? Wenn Sie nur einen Durchschnitt berechnen, sollten Sie eher rechnen als eine langwierige Simulation, bei der ohnehin ein statistischer Fehler auftritt. – Julien
Sie möchten also 2 * Milliarden * Zufallszahlen generieren? Das wird sicherlich Zeit brauchen. – justhalf
Vielleicht eine kleine Beschleunigung mit 'sum = numpy.sum (numpy.random.random_sample (8)) * pi_8' –