使用多处理填充3D数组

时间:2017-04-15 23:36:41

标签: python arrays numpy parallel-processing multiprocessing

我希望通过多处理从以下脚本填充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() 

1 个答案:

答案 0 :(得分:2)

Pool.map的作用是使用工作进程将函数应用于给定数据。然后它从函数中收集返回数据并将其传输给父级。

由于您的功能没有返回任何内容,因此无法获得任何结果。

每个工作人员都会修改data1本地副本。 : - )

当您要修改大量数据时,由于在工作进程和父进程之间移动数据的开销,multiprocessing通常不是一个好的解决方案。

首先使用单个流程尝试。