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

Python NumPy矩阵运算@与*运算符差异及广播报错原因

NumPy矩阵运算中@与*运算符的核心差异

你实验中用到的代码是线性回归求解参数的正规方程表达式,两个运算符的作用完全不同,具体区别如下:

  • * 执行逐元素相乘
    对NumPy中最常用的ndarray类型(也就是你通过pandas、numpy生成的常规二维数组),*会对两个数组相同位置的元素做一对一的乘法运算,也就是逐元素广播操作。
    这个操作要求两个数组的形状满足广播匹配规则:要么形状完全一致,要么其中某一维度长度为1可自动扩展,不满足规则时就会抛出你遇到的operands could not be broadcast together with shapes报错。
  • @ 执行标准线性代数矩阵乘法
    @是Python 3.5版本后专门为矩阵运算新增的运算符,对应NumPy中的np.matmul()方法,完全遵循线性代数的矩阵乘法规则:要求参与运算的前一个矩阵列数等于后一个矩阵的行数,运算结果形状为(前矩阵行数, 后矩阵列数)。

补充说明:如果你使用的是NumPy中已被官方弃用的np.matrix类型,*会被重载为矩阵乘法,但当前做统计计算、数据处理的通用实践中均使用ndarray类型,这类场景下矩阵乘法统一使用@即可,不会出现逻辑错误。

你给出的代码片段thetaMatrix = np.linalg.inv(a.T@a) @ (a.T@b)中所有乘法都是严格的矩阵乘法,必须使用@运算符,替换为*会触发逐元素运算的广播规则校验,自然会抛出形状不匹配的报错。

内容的提问来源于stack exchange,提问作者ikmun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:48:25