让我们使用例如 numpy.sin()
numpy.sin()
以下代码将为数组的每个值返回正弦值a:
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 )
还是有更好的方法来做到这一点?
有 是 一个更好的办法: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是否可以评估您更复杂的函数。