Я хочу генерировать восемь случайных чисел в диапазоне (от 0 до pi/8), добавлять их вместе, принимать синус этой суммы и после этого N раз, возьмите средний результат. После масштабирования я получаю правильный ответ, но он слишком медленный для N > 10^6
, особенно когда я усредняю по N пробкам n_t = 25
еще раз! Я в настоящее время получаю этот код для запуска около 12 секунд для N = 10^5
, что означает, что это займет 20 минут для N = 10^7
, что кажется не оптимальным (может быть, я не знаю!).Оптимизация генерации большого числа случайных чисел с использованием 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' –