Python多进程,快速计算大矩阵

时间:2013-08-22 02:53:03

标签: python matrix multiprocessing

大家,我正在尝试进行以下计算。

我有一个2D n * d numpy数组A,它的每一行都是一个d维数据点x。我想计算一个* n矩阵B,它的每个元素B [i,j] = f(A [i],A [j]),其中f(p,q)是一个对称函数适用于每个可能的对但是,对于datap0ints,它有一些非线性操作,并且不能轻易地进行矢量化。

由于n和d可能非常大,n~200000,d~1000,这个计算速度很慢,我试图用多处理加速它.Pool()

这是我到目前为止的代码,为了简单起见,我故意忽略对称属性(B [i,j] == B [j,i])。

p = Pool(cpu_count())

for i, x in enumerate(A):
    B[i] = p.map(functools.partial(f , x) , A) 

我正在修复f()的一个参数作为A的一个元素,并将map()=应用于可迭代的nparray A,这样我就可以一次获得一行的答案。

这个问题就是速度,当我用(n,d)=(1000,100)尝试它时,它比我原来的元素计算更慢。

在阅读了许多其他相关帖子后,我想这是因为函数f()被来回腌制和取消,导致巨大的开销。

我猜对了吗?有没有更好的方法呢?

提前致谢。

0 个答案:

没有答案