![](/img/trans.png)
[英]Numpy function not differentiating between dot product and matrix multiplication
[英]Matrix by Vector multiplication using numpy dot product
我有一个矩阵m = np.array([[3,4], [5,6], [7,5]])
和一个向量v = np.array([1,2])
这两个张量可以成倍增加。
对于上述两个张量的乘法,没有。 m
的列数必须等于 no。 v
的行数
m
和v
的形状分别为 (3,2) 和 (2,)。
如果m
有 3 行和 2 列而v
有 1 行和 2 列,那么乘法怎么可能?
乘法是可能的,因为v
只有一维。 Numpy 将其视为一个向量,因此该向量有 2 个分量,因此允许矩阵向量相乘。
但是,如果您强制v
形状为 1 行和 2 列(所以 2 维),您将收到(预期的)错误:
>>> v.reshape(1,2).shape
(1, 2)
>>> np.dot(m, v.reshape(1,2))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<__array_function__ internals>", line 5, in dot
ValueError: shapes (3,2) and (1,2) not aligned: 2 (dim 1) != 1 (dim 0)
为了有一个有效的乘法,你需要v
是 2 行和 1 列(所以你需要转置它):
>>> np.dot(m, v.reshape(1,2).T)
array([[11],
[17],
[17]])
你可以看到结果的形状是(2,1)
,所以是 2 行 1 列。
在 NumPy 中,我建议不要过多考虑“行”和“列”
numpy 中的数组可以有任意数量的维度 - 您可以创建一维、二维或 100 维数组。 100 维数组没有“行”和“列”,一维数组也没有。
将一维或二维数组相乘的简单规则是:第一个数组的最后一个轴/维度必须与第二个数组的第一个轴/维度具有相同的大小。
所以你可以乘以:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.