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

PyTorch/Numpy维度运算:为何[n] + [n, 1]的输出维度为[n, n]?

Numpy与PyTorch加法运算维度推导逻辑解答

1. 示例输出(2,2)维度的原因

你遇到的是两类框架通用的**广播(Broadcasting)**机制,我们结合你的代码片段逐一拆解:

import numpy as np
x = np.arange(2)     # shape (2,) 1维数组
y = x.reshape(-1, 1) # shape (2, 1) 2维数组
z = y + x

做元素级加法前,框架会先自动对齐两个数组的维度:

  1. 首先对齐维度数量:维度更少的x会在最左侧补1个长度为1的维度,临时shape变为(1, 2)
  2. 从最右侧开始逐维度比对长度:
    • 最右侧维度:y的长度是1,x的长度是2,长度为1的维度会自动扩展到和另一数组同维度长度一致,y临时shape变为(2, 2)
    • 左侧维度:x的长度是1,y的长度是2,x的该维度自动扩展到2,临时shape变为(2, 2)
      两个数组对齐后shape完全一致,逐元素相加的结果自然就是(2, 2)。

2. 通用维度预判规则

Numpy和PyTorch的元素级运算(加减乘除、比较运算、逐元素函数等)都遵循完全相同的广播规则,你可以按照下面的固定逻辑预判结果维度:

  • 第一步:对齐维度数量,给维度更少的数组最左侧补长度为1的维度,直到两个数组维度数相同
  • 第二步:从最右侧开始逐位比对维度长度:
    • 两个维度长度相等:校验通过,继续比对左侧维度
    • 其中一个维度长度为1:该维度会自动扩展到和另一数组同位置维度长度一致,校验通过,继续比对左侧维度
    • 两个维度长度均不为1且不相等:直接抛出维度不匹配报错
  • 所有维度校验通过后,结果数组的每个维度长度取两个输入数组对应维度的最大值

注:广播是逻辑层面的维度扩展,不会真的复制数组数据,不会产生额外的内存占用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:36:03