マルチスレッドであることが想定されているにもかかわらず、1 つのコアしか使用していない numpy に気付いたので、単純な分析コードの一部を簡単にマルチスレッド化する方法を探していました。
numpy.dot を使用したテストですべてのコアが使用されていることがわかるため、numpy が複数のコア用に構成されていることはわかっています。単独でこれほど高速に実行できない何らかの理由があるのでしょうか? 比率は、私の例で示した 3 よりも 2 に近いですが、より大きな配列でも同様の動作が見られます。
同様のnumpyの速度の問題に関する一連の投稿を読んでいますが、どうやら思ったよりも複雑なようです。読みやすく、コードが少ないため、平均を使用することをお勧めしますが、ドットベースの平均に切り替える可能性があります。
In [27]: data = numpy.random.rand(10,10)
In [28]: a = numpy.ones(10)
In [29]: %timeit numpy.dot(data,a)/10.0
100000 loops, best of 3: 4.8 us per loop
In [30]: %timeit numpy.mean(data,axis=1)
100000 loops, best of 3: 14.8 us per loop
In [31]: numpy.dot(data,a)/10.0 - numpy.mean(data,axis=1)
Out[31]:
array([ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 1.11022302e-16, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
-1.11022302e-16])