You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Numpy中数组相乘结果矩阵shape不符问题咨询

问题原因与解决方法

核心原因

你遇到的问题大概率是以下两种情况之一:

  • 数组维度定义错误:你以为B是3×1的列向量,但实际在Numpy里定义成了一维数组(shape为(3,)),或者误定义成了1×3的行向量。
  • 乘法顺序搞反:矩阵乘法不满足交换律,如果你用了np.dot(B, A)而非np.dot(A, B),就会得到1×3的结果。

具体分析与解决

  1. 检查并修正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的结果。

  2. 确认乘法顺序
    矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数:

    • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:55:19