我试图理解为什么numpy的dot函数表现如下:
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))
Run Code Online (Sandbox Code Playgroud)
现在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)
Run Code Online (Sandbox Code Playgroud)
我期待(2, 9, 5)和(3, 2, 9, 5)分别.另一方面,np.matmul
我的期望是什么:矩阵乘法在第二个参数的前N-2维上广播,结果具有相同的形状:
>>> np.matmul(M, V3).shape
(2, 9, 5)
>>> np.matmul(M, V4).shape
(3, 2, 9, 5)
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:np.dot行为的理由
是什么?它是出于某种特定目的,还是应用一般规则的结果?
python numpy linear-algebra matrix-multiplication numpy-broadcasting