Numpy要素ベースの乗算とマトリクス乗算の違い


最近pythonを学ぶ必要があるため、numpy(pythonの科学計算ライブラリ)に関する基本的な知識を見ました(numpyを学びたい人はこのブログの深さの学習とコンピュータの視覚シリーズ(1)基本的な紹介は、numpyの基礎文法を迅速に理解するのに役立ちます)が、numpyのarrayの乗算を見ると、arrayの乗算記号表現は一般的な線形代数のマトリクス演算記号とは正反対であるため、頭が常に曲がらないことがあります.より良い記憶とarrayの乗算記号を使用するために、資料を調べた後にnumpyにおけるarray乗算記号についての理解を記録します.
numpyの基本データ型はarray(配列)であり、同じタイプの要素からなるクラスマトリクスデータであり、listまたはネストされたlistで初期化することができる.1次元(listで初期化)もあれば、多次元(ネストされたlistで初期化され、いくつかのネストが数次元)もあります.例は次のとおりです.
import numpy as np
#  Numpy  
x=np.array([1,2,3])
#  Numpy  
x2=np.array([[1,2,3],[4,5,6]]) #x2.ndim=2,x2.shape=(2,3)
x3=np.array([[[1,2],[1,2]],[[3,4],[3,4]],[[5,6],[5,6]]]) #x3.ndim=3,x3.shape=(3,2,2)

またnumpyにはマトリクスデータ型matrixもあり、arrayのサブクラスであり、このタイプは線形代数のマトリクスの意味と一致し、通常の意味でのマトリクス演算を実行しているが、公式ドキュメントではarrayを使用することを提案している.arrayはより多くのサポートがあるため、要素乗算を行う際にも便利である.arrayとmatrixの2つのタイプの具体的な違いとnumpyとmatlabの違いはここを読むことができます.
Numpy配列は、2つのarrayに対応する要素が乗算されて同じshapeのarrayが得られる要素に基づく乗算をx*yまたはnp.multiply(x,y)で表す.ベクトル内積または行列乗算は、x.dot(y)またはnp.dot(x,y)で表される.具体例は以下を参照してください.
import numpy as np

x = np.array([[1,2],[3,4]])
y = np.array([[5,6],[7,8]])

#      ,      
# [[ 5 12] # [21 32]]
print x * y
print np.multiply(x, y)

v = np.array([9,10])
w = np.array([11, 12])

#     ,   219
print v.dot(w)
print np.dot(v, w)

#     (  array                  ,                 )
# v    ,    ,   [29 67]
print x.dot(v) 
print np.dot(x, v)
# v    ,    ,   [39 58]
print v.dot(x)
print np.dot(v,x)

#     
# [[19 22] # [43 50]]
print x.dot(y)
print np.dot(x, y)