Я хочу решить стохастическое c дифференциальное уравнение, используя многопроцессорность. Упрощенный непараллельный код выглядит так:
import numpy as np
x = np.zeros((2, 3, 4)) #matrix
z = np.random.normal(0, 1, (2,3,4)) #noise
z_array = z
for i in range(2):
for j in range(3):
x[i,j,0] = i
for k in range(3):
x[i,j,k+1] = x[i,j,k]*z_array[i,j,k]
Результатами являются шум z_array
и соответствующая матрица x
. Я хочу использовать многопроцессорность для второго l oop. Проблема в том, что я не знаю, как включить шум z
в параллельный код. Наивная реализация похожа на
import os
import numpy as np
import functools as ft
from multiprocess import Pool
def fun(i, k):
x = np.zeros(4)
x[0] = i
for k in range(2):
z = np.random.normal(0, 1)
x[k+1] = x[k]*z
return x
if __name__=='__main__':
pool = Pool(os.cpu_count()-1)
x = np.zeros((2, 3, 4))
for i in range(2):
result = np.array(pool.map(ft.partial(fun, i), range(3)))
x[i] = result
pool.close()
pool.join()
Так как код включает в себя случайные числа, я не уверен, верен ли параллельный код или нет, и я не знаю, как получить шумы z
. Есть идеи?