範囲内の8つの乱数を生成したい場合(0からpi/8)、それらを合計してこの合計の正弦を取ってから、 N回、平均結果を取る。これをスケールアップした後、私は正しい答えを得るが、N > 10^6
の場合は遅すぎる。特にN回の試行平均を行ったときn_t = 25
回以上!現在、このコードを12秒のN = 10^5
で実行しようとしています。これは、N = 10^7
の場合、の場合は20分となりますが、それは最適ではないようです(それはわかりません!次のようにPythonを使用して多数の乱数生成を最適化する3
私のコードは次のとおりです。
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))
誰も私はそれがはるかに高く評価されるだろう、これを最適化するのに役立つことができれば!
ありがとう:)
最終目標は何ですか?それが単に平均を計算しているのであれば、とにかく統計的誤差を被る長いシミュレーションではなく、数学を実行します。 – Julien
2億円の乱数を生成したいのですか?それは確かに時間がかかるでしょう。 – justhalf
おそらく、sum = numpy.sum(numpy.random.random_sample(8))* pi_8' –