/ / numpy行列の乗算形状[複製] - python、numpy、行列乗算

numpy行列の乗算の形状[重複] - python、numpy、行列乗算

行列乗算では、 A 3 x 2行列(3行2列)であり、 B 2 x 4の行列(2行4列)で、行列が C = A * B、その後 C 3行4列にします。なぜ愚痴はこの掛け算をしないのですか?次のコードを試すとエラーになります。 ValueError: operands could not be broadcast together with shapes (3,2) (2,4)

a = np.ones((3,2))
b = np.ones((2,4))
print a*b

AとBを入れ替えてみても同じ答えが得られます。どうして?この場合、行列乗算はどのようにして行えますか?

回答:

回答№1の15

* numpy配列の演算子は、行列乗算ではなく、要素単位の乗算です(同じ次元の配列のアダマール積に似ています)。

例えば:

>>> a
array([[0],
[1],
[2]])
>>> b
array([0, 1, 2])
>>> a*b
array([[0, 0, 0],
[0, 1, 2],
[0, 2, 4]])

テンキー配列の行列乗算の場合:

>>> a = np.ones((3,2))
>>> b = np.ones((2,4))
>>> np.dot(a,b)
array([[ 2.,  2.,  2.,  2.],
[ 2.,  2.,  2.,  2.],
[ 2.,  2.,  2.,  2.]])

さらに、行列クラスを使うことができます。

>>> a=np.matrix(np.ones((3,2)))
>>> b=np.matrix(np.ones((2,4)))
>>> a*b
matrix([[ 2.,  2.,  2.,  2.],
[ 2.,  2.,  2.,  2.],
[ 2.,  2.,  2.,  2.]])

不完全な配列のブロードキャストに関する詳細情報が見つかります。 ここにそして、行列クラスに関するより多くの情報が見つかります。 ここに.