繁体   English   中英

使用 numpy 点积的向量乘法矩阵

[英]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的行数
mv的形状分别为 (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 维数组没有“行”和“列”,一维数组也没有。

将一维或二维数组相乘的简单规则是:第一个数组的最后一个轴/维度必须与第二个数组的第一个轴/维度具有相同的大小。

所以你可以乘以:

  • (3, ) 数组乘 (3, 2) 数组
  • (3, 2) 数组乘 (2, 3) 数组
  • (2, 3) 数组乘 (3, ) 数组

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM