2016-08-05 17 views
1

私は乗算する2つの行列を持っています。 1つはウェイト行列で、そのサイズは900x2x2です。 もう1つは、サイズが2x2の入力行列-Iです。 は、今私は行列、 を900x1なりますc = WI以上の合計を実行したいが、私は操作を実行するときには、乗算して、もう一度私に900x2x2行列を与えます。3D行列に2次元行列を掛ける

Q 2)(関連)だから私はそれらの両方が2D作られ900x4 * 4x1を掛けたが、それはあなたが最初の最後の二つの軸を失うことをしようとしているようだ

ValueError:operands could not be broadcast together with shapes (900,4) (4,1)

+0

私は900x2x2と2x2から900x1を得る方法を理解するのに苦労しています。何か不足していますか?どちらが「W」で、どちらが「I」ですか?アプリケーションのドメインとは何ですか(これは役に立ちます)? – polarise

+0

900ウエイトの2x2 * 2x2の合計。ちょうど編集されました。もしあなたがANNを実装していれば、あなたはそれをよりよく理解するでしょう。 – Hima

答えて

2

を言って私にエラーを与えますその行列乗算を用いて第2の重みアレイの唯一の2つの軸に対して配列する。私たちは、np.tensordotでnumpyのコードにそのアイデアを翻訳し、のようなので、それぞれ入力配列としてarr1arr2を想定した可能性 -

np.tensordot(arr1,arr2,axes=([1,2],[0,1])) 

をnumpyのコードに置くためにもう一つの簡単な方法は、np.einsumとなり、そのように -

np.einsum('ijk,jk',arr1,arr2) 
+0

Okey!しかし、一般に 'MxN * NxK'を掛ければ' MxK'が得られるはずです。しかし、デフォルトでnumpyは 'MxN * 1xN'を掛けようとしたときにドットプロダクトを与えるようです。技術的にはQ2では何も間違っていない)、それでもエラーが出る。どうして ? – Hima

+1

@Hima NumPy配列で作業する場合、 '*'は要素単位の乗算を意味し、 'np.dot/np.tensordot'は行列の充実化を実行するために使用されます。 – Divakar

+0

はいそうです。@ Divakar – Hima

関連する問題