2010-12-20 12 views
13

行列Pは形がMxNで、3dテンソルTは形がKxNxRです。私は、PNxRのマトリックスをTに掛けて、KxMxR 3dテンソルにしたいと考えています。Numpy:3次元テンソルを持つ行列を掛ける - 提案

P.dot(T).transpose(1,0,2)は、望ましい結果を与える。この問題にニーサー解決策がありますか(つまり、取り除くことはtransposeですか?)これは非常に一般的な操作でなければならないので、他の人が異なるアプローチを見つけたと仮定します。 tensordotを使用しています(これは試しましたが、目的の結果が得られませんでした)。意見/見解は非常に高く評価されるでしょう!

答えて

6
scipy.tensordot(P, T, axes=[1,1]).swapaxes(0,1) 
+1

ハ!私は昨日何時間も 'scipy.tensordot(P、T、axes = [1,1]) 'の結果を見つめて、スワップされた次元を絶望的にしていました。ありがとうございました! – osdf

+0

ようこそ。軸の入れ替えが正しい数値答えを与えることも確認しました。 –

2

また、アインシュタインの総和表記を使用することもできます。

P = numpy.random.randint(1,10,(5,3)) 
P.shape 
T = numpy.random.randint(1,10,(2,3,4)) 
T.shape 

numpy.einsum('ij,kjl->kil',P,T) 

とあなたに同じ結果を与えるべきである:

P.dot(T).transpose(1,0,2) 
関連する問題