用于计算一个阵列的多处理

时间:2015-04-22 07:51:45

标签: python arrays multidimensional-array multiprocessing

此问题跟随此[1]。我有一个很大的3D阵列,我必须做一些繁重的计算。 我想将我的阵列的一部分分成4个部分,并用我的计算机的每4个核心对每个部分进行计算...... 并为我的3D阵列的每个切片做到这一点......最好的方法是什么?

import numpy

size = 8.
Y=(arange(2000))
X=(arange(2000))
(xx,yy)=meshgrid(X,Y)

array=zeros((Y.shape[0],X.shape[0],size))

array[:,:,0] = 0
array[:,:,1] = X+Y
array[:,:,2] = X*cos(X)+Y*sin(Y)
array[:,:,3] = X**3+sin(X)+X**2+Y**2+sin(Y)

2 个答案:

答案 0 :(得分:1)

您可以使用multiprocessing模块中的Pool

from multiprocessing import Pool

def f(num):
  return num * 2 # replace with heavy computation

lst = [1,2,3,4,5,6,7,8,9,10,11]
p = Pool(4)
print p.map(f, lst)

它与三维numpy数组同样有效:

from multiprocessing import Pool
import numpy

def f(num):
  return num * 2 # replace with heavy computation

arr = numpy.array(
  [numpy.array([
    numpy.array([1,2,3]),
    numpy.array([4,5,6]),
    numpy.array([7,8,9])]),
   numpy.array([
     numpy.array([1,2,3]),
     numpy.array([4,5,6]),
     numpy.array([7,8,9])])])
p = Pool(4)
print p.map(f, arr)

答案 1 :(得分:1)

作为多处理的替代方案,您可以使用concurrent.futures模块:

import concurrent.futures

def f(num):
    return num * 2
arr = […]

with concurrent.futures.ProcessPoolExecutor() as exc:
    print(list(exc.map(f, arr)))