6

私は OpenBlas で numpy をコンパイルしましたが、なぜ einsum が dot よりもはるかに遅いのか疑問に思っています (3 つのインデックスの場合は理解していますが、2 つのインデックスの場合はパフォーマンスが低い理由もわかりません)。ここに例があります:

import numpy as np
A = np.random.random([1000,1000])
B = np.random.random([1000,1000])

%timeit np.dot(A,B)

Out: 10 loops, best of 3: 26.3 ms per loop

%timeit np.einsum("ij,jk",A,B)

Out: 5 loops, best of 3: 477 ms per loop

einsum に OpenBlas と numpy.dot のような並列化を使用させる方法はありますか? 内積に気付いた場合、np.einsum が単に np.dot を呼び出さないのはなぜですか?

4

1 に答える 1

3

einsumインデックス文字列を解析してnditerからオブジェクトを構築し、それを使用して積和反復を実行します。インデックスが軸のスワップと合計 ('ii->i') のみを実行する特殊なケースがあります。また、2 変数と 3 変数の特殊なケースがある場合もあります (それ以上ではなく)。ただし、外部ライブラリを呼び出そうとはしません。

私は純粋な python work-a-like を作成しましたが、計算の特殊なケースよりも解析に重点を置いています。

tensordotdot実際の計算を呼び出すことができるように、形状を変更してスワップします。

于 2015-05-27T21:22:07.720 に答える