Python中序列转置后内积运算异常?是否为Bug?
关于NumPy一维数组矩阵乘法的疑问解答
这不是Bug,是NumPy对一维数组(秩为1的数组)的设计逻辑导致的,具体原因如下:
- 你定义的
u = np.array([0,1,1,1])是一维数组,形状为(4,),它既不是传统意义上的行向量(形状(1,4)),也不是列向量(形状(4,1))。 - 一维数组的转置操作
u.T不会改变其形状,因为它只有一个轴,没有可交换的维度,u.T和u是完全相同的数组。 @运算符对一维数组执行的是内积运算,所以不管是u @ u.T还是u.T @ u,本质都是两个一维数组的内积,结果自然是标量。
如果想要得到矩阵形式的结果,需要将一维数组转换为二维的行/列向量,示例代码如下:
import numpy as np # 转为列向量(形状(4,1)) u_col = np.array([[0,1,1,1]]).T # 转为行向量(形状(1,4)) u_row = np.array([[0,1,1,1]]) print(u_col @ u_row) # 输出4×4的矩阵 print(u_row @ u_col) # 输出标量
内容的提问来源于stack exchange,提问作者r-learning-machine
相关产品推荐
相关产品推荐

