5

次のように、2 つの 3 次元行列があるとします (この matlab の例http://www.mathworks.com/help/matlab/ref/dot.htmlから取得):

A = cat(3,[1 1;1 1],[2 3;4 5],[6 7;8 9])
B = cat(3,[2 2;2 2],[10 11;12 13],[14 15; 16 17])

3 番目の次元に沿ってペアワイズ ドット積を取りたい場合は、matlab で次のようにすることができます。

C = dot(A,B,3)

結果は次のようになります。

C =
  106   140
  178   220

numpy での同等の操作、できればベクトル化されたオプションは、配列全体に double for ループを記述する必要がないようにするためのものです。np.tensordot私は何をすべきか、何をすべきかを理解できないようですnp.innerが、それらはオプションかもしれません。

4

3 に答える 3

2

解決策は次のとおりです。

A = dstack([[[1, 1],[1 ,1]],[[2 ,3],[4, 5]],[[6, 7],[8, 9]]])
B = dstack([[[2, 2],[2, 2]],[[10, 11],[12, 13]],[[14, 15], [16, 17]]])

C = einsum('...k,...k',A,B)

基本的dstackに、3 番目の軸に沿って連結し ( docseinsum )、 numpy が提供する強力なアインシュタイン集計ツールを使用します ( docs ) 。

于 2014-06-05T17:52:13.270 に答える