二维与一维矩阵乘法疑问:(2x3)与(1x3)相乘为何得(2,)结果?
问题解答
首先要明确:Numpy里的一维数组(比如你例子里的y = np.ones(3),形状是(3,))不是严格意义上的行向量或列向量,它是秩为1的数组,和线性代数中的向量表现有所不同。
np.dot对于二维数组(矩阵)和一维数组的运算规则是:
- 当第一个参数是二维数组(形状
(m,n)),第二个参数是一维数组(形状(n,))时,np.dot会自动将一维数组视为列向量(形状(n,1))执行矩阵乘法,得到的结果理论上是形状(m,1)的二维数组,但Numpy会自动将其压缩为一维数组(形状(m,)),也就是你看到的array([6.,15.])。
如果想要得到严格线性代数意义下的(2,1)形状结果,可以把一维数组转换为二维列向量:
import numpy as np x = np.array([[1., 2., 3.], [4., 5., 6.]]) y = np.ones(3).reshape(3, 1) # 转为(3,1)的列向量 np.dot(x, y)
运行结果:
array([[ 6.], [15.]])
反过来,如果把一维数组当作行向量和二维数组做乘法,需要用np.dot(y, x),此时Numpy会把y视为行向量(1,3),运算后得到形状(1,2)的二维数组,同样也可以被压缩为一维数组(2,)。
内容的提问来源于stack exchange,提问作者Mostafa Hosseini
相关产品推荐
相关产品推荐

