1
我有两个参数的Python函数,f(x,y)
,它返回一个标量。我也有两个可能参数np.array
,xs
和ys
。我想计算一个形状为(xs.size, ys.size)
的二维numpy数组,其形式为f
,其值为xs
和ys
之间的所有参数组合。结果应该等于获取函数评估的所有组合的矩阵
np.array([[f(x,y) for y in ys] for x in xs])
我希望尽可能有效地实现这一点,并利用多个处理器内核。 f
没有任何副作用。我试图使用numpy.vectorize
,但没有设法使用它达到预期的效果。例如。 numpy.outer
正是我想要的特殊情况f=operator.__mul__
。
作为一个额外的警告,虽然可能不直接相关,但其中一个数组(例如ys
)不包含数字,但包含scipy.interpolate.interp1d
返回的对象。函数f
通过这些插值计算一个定积分scipy.integrate.quad
。结果矩阵仍然只包含数字。
可能是你可以通过删除嵌套循环提高性能一点。例如,计算'xs'和'ys'的笛卡尔乘积,然后计算每次通过的'f'。这里是笛卡尔产品的代码(见公认的答案),它是快速的:http://stackoverflow.com/questions/1208118/using-numpy-to-build-an-array-of-all-combinations-of-two -arrays – Dataman
看起来'scipy.interpolate.interp1d'返回的对象不能被腌渍,这对使用'multiprocessing'模块造成问题... –
如果你改变这个标题,你可能会得到更好的答案题。问题是关于多处理,而不是组合。 – tom10