2017-02-08 5 views
0

私は2つの大きな行列を乗算した後、結果の行列の対角要素のみをしたい:Theanoで異なるテンソルを含むインデックスに制約を与えるには?

m1[i, j] = sum_k A[i, k] * B[k, j] 
m2[i] = m1[i, i] 

私はこのようにそれを行うことができます。しかし、このようにするには、多くの不必要な操作が必要です。それを行うためのより良い方法は次のようになります:

m[i, i] = sum_k A[i, k] * B[k, i] 

2番目の方法で「強制」する方法はありますか?

+0

'i == j'でdo sumに問題はありますか? – Arman

+0

@Arman、ループで自分でやっても問題はありません。しかし、私はTheanoコマンド(tensordot)を使用したいと思います。 – Roman

+0

あなたは 'numpy.tensordot'を意味しますか? – Arman

答えて

0

ソリューション:

T.sum(a * b.dimshuffle(1,0), axis = 1) 

説明:

が第二テンソルのインデックスを持つ最初のテンソルの「ペア」の指標は、我々はペアごとの乗算を使用することができますし。この場合、最初のテンソルのすべての次元は、2番目のテンソルのすべての対応する次元と対になります。しかし、それを行うには、最初のテンソルのi_th次元が常に2番目のテンソルのi_th次元とペアになるため、次元を並べ替える必要があるかもしれません。したがって、特定の説明されたケースで転置を使用してください。

エレメントワイズ乗算の後には、ある次元でsumを使用できます。

関連する問題