小编典典

并行执行Numpy向量运算

python

让我们使用例如 numpy.sin()

以下代码将为数组的每个值返回正弦值a

import numpy
a = numpy.arange( 1000000 )
result = numpy.sin( a )

但是我的机器有32个内核,所以我想利用它们。(对于类似的事情,开销可能不值得,numpy.sin()但是我实际上想要使用的功能要复杂得多,并且我将处理大量数据。)

这是最好的方法(阅读:最聪明还是最快):

from multiprocessing import Pool
if __name__ == '__main__':
    pool = Pool()
    result = pool.map( numpy.sin, a )

还是有更好的方法来做到这一点?


阅读 138

收藏
2020-12-20

共1个答案

小编典典

一个更好的办法:numexpr

从他们的主页稍微改写了一下:

它是用C编写的多线程VM,可以分析表达式,更高效地重写表达式,并即时将它们编译为代码,从而为内存和cpu受限操作提供接近最佳的并行性能。

例如,在我的4核计算机中,评估正弦仅比numpy快4倍。

In [1]: import numpy as np
In [2]: import numexpr as ne
In [3]: a = np.arange(1000000)
In [4]: timeit ne.evaluate('sin(a)')
100 loops, best of 3: 15.6 ms per loop    
In [5]: timeit np.sin(a)
10 loops, best of 3: 54 ms per loop

文档,包括此处支持的功能。您必须检查或给我们更多信息,以查看numexpr是否可以评估您更复杂的函数。

2020-12-20