矩阵向量乘法:如何直接得到形状为(d,)的结果?
解决numpy矩阵与向量相乘后返回(2,1)形状而非(2,)的问题
问题重现
import numpy as np X = np.matrix([[0, 1], [1, 0]]) e1 = np.array([1, 1]) state = X @ e1 print(X @ state) # 会因维度不匹配报错,state形状是(2,1)
使用@操作符进行矩阵向量乘法时,返回的向量形状为(2,1)而非(2,),导致后续矩阵相乘出现维度不匹配问题。
直接获取形状为(d,)结果的方法
方法一:用
np.array替代np.matrix定义矩阵np.matrix是numpy中专门的矩阵类,乘法后默认返回二维列矩阵;而np.ndarray的矩阵乘法会将向量视为一维数组,返回一维结果,完全符合需求:import numpy as np X = np.array([[0, 1], [1, 0]]) # 改用array定义矩阵 e1 = np.array([1, 1]) state = X @ e1 print(state.shape) # 输出 (2,) print(X @ state) # 正常执行,无维度问题方法二:保留
np.matrix,用.A1属性转换结果
如果必须使用np.matrix,可以直接用矩阵对象的.A1属性将二维列矩阵转为一维数组,比reshape更简洁高效:import numpy as np X = np.matrix([[0, 1], [1, 0]]) e1 = np.array([1, 1]) state = (X @ e1).A1 # 用.A1转成一维数组 print(state.shape) # 输出 (2,) print(X @ state) # 正常执行
补充说明
np.matrix的设计初衷是兼容MATLAB的矩阵操作习惯,但在现代numpy使用中,更推荐用np.ndarray来处理数组和矩阵,它的行为更灵活一致,能避免这类维度匹配的麻烦。
内容的提问来源于stack exchange,提问作者Damuna Taliffato
相关产品推荐
相关产品推荐

