不同维度NumPy数组相减结果疑问:为何输出为[[0,1]]?
为什么执行
print(np.array([1,2])-np.array([[1,1]]))会得到[[0,1]]? 先明确两个参与运算的numpy数组的形态:
np.array([1,2])是1维数组,形状为(2,),可以理解成一行2个元素的序列np.array([[1,1]])是2维数组,形状为(1,2),可以理解成包含一行2个元素的嵌套序列
这是numpy的广播机制在起作用——当两个形状不完全匹配的数组进行运算时,numpy会自动调整它们的形状,让元素能对应运算,核心规则是:
- 从形状的最后一个维度开始比较,要么维度长度相同,要么其中一个维度的长度是1
- 维度更少的数组会被“逻辑扩展”成和另一个数组相同的形状(不会实际复制数据,只是运算时按扩展后的形态处理)
具体到这个例子:
- 1维数组
(2,)会被广播补位,逻辑上变成形状为(1,2)的数组,也就是[[1,2]] - 此时两个数组形状均为
(1,2),可以逐元素相减:- 第一个元素:
1 - 1 = 0 - 第二个元素:
2 - 1 = 1
- 第一个元素:
- 最终得到的运算结果就是
[[0,1]]
内容的提问来源于stack exchange,提问作者Ujjawal Bindal
相关产品推荐
相关产品推荐

