У меня есть эта функция, которую я хочу распараллелить.
def sample_x(n, y, x, k_star, theta, psi, l, k, m, s, score):
p, score[n, l] = calculate_score(theta, psi, n, l)
x_nmk = np.random.multinomial(y[n, l], p / score[n, l])
if (n, l, k) in x:
if x[(n, l, k)] > 0:
m[n, l] += x_nmk - x[(n, l, k)]
s[l, k] += x_nmk - x[(n, l, k)]
k_star[n, l] = k
x[(n, l, k)] = x_nmk
Но все x, k_star, m, s не меняются, если я назову это, как показано ниже.
def sample_x_all(x, y, psi, theta, m, s, k_star, score, pool):
k_star[:] = np.zeros((y.shape[0], y.shape[1]))
for k in range(psi.shape[0]):
for l in range(psi.shape[1]):
pool_x = partial(sample_x, y=y, x=x, k_star=k_star, theta=theta,
psi=psi, l=l, k=k, m=m, s=s, score=score)
pool.map(pool_x, np.arange(theta.shape[0]))
Может кто-нибудь сказать мне, почему?Я также не хочу писать цикл for в конце и заполнять x ..