Numpy中数组相乘结果矩阵shape不符问题咨询
问题原因与解决方法
核心原因
你遇到的问题大概率是以下两种情况之一:
- 数组维度定义错误:你以为B是3×1的列向量,但实际在Numpy里定义成了一维数组(shape为
(3,)),或者误定义成了1×3的行向量。 - 乘法顺序搞反:矩阵乘法不满足交换律,如果你用了
np.dot(B, A)而非np.dot(A, B),就会得到1×3的结果。
具体分析与解决
检查并修正B的维度
先打印B的shape确认实际维度:print(B.shape)如果输出是
(3,),说明这是无行列概念的一维数组,需要转换成3×1的二维列向量:# 方法1:用reshape调整维度 B = B.reshape(3, 1) # 方法2:定义时直接写成二维结构 B = np.array([[1], [2], [3]]) # shape为(3,1)之后用
np.dot(A, B)或者A @ B(Python 3.5+支持的矩阵乘法运算符)计算,就能得到3×1的结果。确认乘法顺序
矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数:- 3×3的A × 3×1的B → 结果为3×1(符合预期)
- 如果误写为B × A,数学上不合法,但Numpy会将一维的B视为1×3的行向量,和3×3的A相乘后得到1×3的结果,这就是你看到的异常输出。
正确的乘法写法:
result = np.dot(A, B) # 或者用@运算符 result = A @ B
验证示例
import numpy as np # 定义正确的3×3矩阵A和3×1列向量B A = np.array([[1,2,3], [4,5,6], [7,8,9]]) B = np.array([[1], [2], [3]]) # 执行正确乘法 result = A @ B print(result.shape) # 输出 (3,1),符合预期
内容的提问来源于stack exchange,提问作者Anubrata Das
相关产品推荐
相关产品推荐

