たとえば、使用してみましょう 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 )
またはこれを行うより良い方法はありますか?
そこである:より良い方法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で評価できるかどうかを確認するために、詳細情報を確認または提供する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加