我正在并行化矩阵的生成,其中矩阵中的每个元素都是通过函数fun来计算的。如果我传递给这个函数的唯一东西是索引i和j,我可以让它工作。但是,我想将另一个变量传递给这个函数说x,我该怎么做?
我正在使用Python 2.7
import numpy as np
import multiprocess as mp
import itertools
p = mp.Pool()
def fun((i,j)):
print i,j
prod = i * j
# what if I want to have a variable x in this function
# prod = i * j * x
return prod
combs = ((i,j) for i,j in itertools.product(xrange(5), repeat=2) if i <= 5)
result = p.map(fun, combs)
p.close()
p.join()
newresult = np.array(result).reshape(5,5)
print newresult
答案 0 :(得分:2)
def fun((i,j,x)):
print i,j,x
prod = i * j * x
return prod
为什么会这样:你实际上只是将一个对象传递给函数,结果证明它是一个元组。 def fun((i,j))只是简单地将元组与对象分开。所以要回答你的问题,你可以添加另一个元素到元组,它工作正常。
更清晰地表达您正在做的事情:
def fun(data):
i,j,x = data
print i,j,x
prod = i * j * x
return prod
data = (2,4,10)
print(fun(data))
或者你可以这样做:
def fun((i,j), x):
print i,j, x
prod = i * j * x
# what if I want to have a variable x in this function
# prod = i * j * x
return prod
print(fun((2,4), 10))