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
做元素级加法前,框架会先自动对齐两个数组的维度:
- 首先对齐维度数量:维度更少的
x会在最左侧补1个长度为1的维度,临时shape变为(1, 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
相关产品推荐
相关产品推荐

