我希望通过多处理从以下脚本填充data1数组。现在,脚本运行正常,但数组没有填满。我尝试实现this,但由于使用了两个iterables,我无法让它工作。帮助赞赏;谢谢! 顺便说一下,我在最新的MacOS上使用了jupyter笔记本。
import numpy as np
import multiprocessing as mp
from itertools import product
#Generate random data:
data = np.random.randn(12,20,20)
#Create empty array to store the result
data1 = np.zeros((data.shape), dtype=np.float)
#Define the function
def fn(parameters):
i = parameters[0]
j = parameters[1]
data1[:,i,j] = data[:,i,j]
#Generate processes equal to the number of cores
pool = mp.Pool(processes=4)
# Generate values for each parameter: i.e. i and j
i = range(data.shape[1])
j = range(data.shape[2])
#generate a list of all combinations of the parameters
paramlist = list(product(i,j))
#call the function and multiprocessing
np.array(pool.map(fn,paramlist))
pool.close()
答案 0 :(得分:2)
Pool.map
的作用是使用工作进程将函数应用于给定数据。然后它从函数中收集返回数据并将其传输给父级。
由于您的功能没有返回任何内容,因此无法获得任何结果。
每个工作人员都会修改data1
的本地副本。 : - )
当您要修改大量数据时,由于在工作进程和父进程之间移动数据的开销,multiprocessing
通常不是一个好的解决方案。
首先使用单个流程尝试。