NumPyで要素ごとの行列乗算(アダマール積)を取得するにはどうすればいいですか?質問する

NumPyで要素ごとの行列乗算(アダマール積)を取得するにはどうすればいいですか?質問する

マトリックスが2つあります

a = np.matrix([[1,2], [3,4]])
b = np.matrix([[5,6], [7,8]])

そして要素ごとの積 を求めたいのですが、[[1*5,2*6], [3*7,4*8]]これは次の式に等しくなります。

matrix([[5, 12], [21, 32]])

試してみましたがnp.dot(a,b)a*bどちらも結果は同じでしたmatrix([[19, 22], [43, 50]])

これは行列積であり、要素ごとの積ではありません。組み込み関数を使用して要素ごとの積 (別名アダマール積) を取得するにはどうすればよいですか?

ベストアンサー1

オブジェクトの要素ごとの乗算にはmatrixnumpy.multiply:

import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
np.multiply(a,b)

結果

array([[ 5, 12],
       [21, 32]])

ただし、arrayの代わりにを使用することをお勧めしますmatrixmatrixオブジェクトは通常の ndarray とさまざまなひどい非互換性があります。 ndarray では、*要素ごとの乗算に を使用できます。

a * b

Python 3.5以降を使用している場合は、演算子を使用して行列の乗算を実行する機能も失われません。@行列の乗算を今行う:

a @ b  # matrix multiplication

おすすめ記事