小编fad*_*sen的帖子

为什么numpy.dot会以这种方式运行?

我试图理解为什么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)并按预期行事.但对于V3V4结果令我感到奇怪:

>>> 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

5
推荐指数
2
解决办法
2337
查看次数