Python - 具有2个输入数组的函数的多处理池

时间:2015-04-28 15:12:51

标签: python arrays numpy multiprocessing pool

我试图使用多进程来减少依赖于形状为2000x2000的2D数组的函数的计算时间。我有2个输入数组的功能,但与p.map它不起作用...(一个没关系)。我该怎么做呢?

from multiprocessing import Pool
from numpy import *
import time
tic=time.clock()

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


r = sqrt((xx)**2 + (yy)**2)

theta = (arctan2((yy),(xx)))

def f(theta,r):
  return 1.*r**(-3/2.)*cos(-3/2.*theta)

p = Pool(4)
print p.map(f, theta,r)
toc=time.clock()

print 'Temps=', toc-tic

我得到一个错误:“具有多个元素的数组的真值是不明确的。使用a.any()或a.all()”

1 个答案:

答案 0 :(得分:1)

解决问题的方法是zip输入arrays

def f(values):
    return 1.*values[1]**(-3/2.)*cos(-3/2.*values[0])

p = Pool(4)
print p.map(f, zip(theta, r))