我试图使用多进程来减少依赖于形状为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()”
答案 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))