dot
numpy の関数がそのように動作する理由を理解しようとしています。
M = np.ones((9, 9))
V1 = np.ones((9,))
V2 = np.ones((9, 5))
V3 = np.ones((2, 9, 5))
V4 = np.ones((3, 2, 9, 5))
np.dot(M, V1)
これで、期待どおりにnp.dot(M, V2)
動作します。しかしV3
、V4
結果は私を驚かせます:
>>> np.dot(M, V3).shape
(9, 2, 5)
>>> np.dot(M, V4).shape
(9, 3, 2, 5)
私は期待(2, 9, 5)
し、(3, 2, 9, 5)
それぞれ。一方、np.matmul
私が期待することはありますか: 行列の乗算は、2 番目の引数の最初のN - 2次元にわたってブロードキャストされ、結果は同じ形状になります:
>>> np.matmul(M, V3).shape
(2, 9, 5)
>>> np.matmul(M, V4).shape
(3, 2, 9, 5)
np.dot
だから私の質問はこれです:それがそうするように振る舞う理由は
何ですか?それは何らかの特定の目的に役立つのでしょうか、それとも何らかの一般的な規則を適用した結果なのでしょうか?