Numpy高级索引:n维数组索引n维数组的结果差异问题
Numpy高级索引逻辑差异说明
第一段代码的运行原理
当你仅传入单个二维数组作为索引时,属于单轴整数数组索引:
- 你定义的
a是形状为(5,5)的二维数组,仅传入index作为索引时,该索引默认作用于a的第0轴(行维度),第1轴(列维度)默认选中全部元素。 - 你的
index形状为(2,5),取值为[[0,1,2,3,4], [0,1,2,3,4]],相当于按索引值选中a的第0、1、2、3、4行,再重复选中一次这5行,最终选中的结果形状为(2,5,5)。 - 对选中的结果赋值
1.0时,所有被选中的行的全部列都会被覆盖为1.0,因为原数组的5行都被选中过,所以最终整个数组的元素全为1.0。
第二段代码的运行原理
当你传入两个一维数组作为索引时,属于多轴整数数组索引:
- 逗号分隔的两个
index分别对应a的第0轴、第1轴的索引,Numpy会将两个索引数组对应位置的元素逐对匹配,选中(0,0)、(1,1)、(2,2)、(3,3)、(4,4)这5个对角线位置的元素。 - 赋值操作仅作用于这5个匹配到的位置,因此只有对角线元素被修改为1.0。
拓展补充
如果想要用二维形状的索引数组实现多轴配对索引,只需要拆分索引数组的对应维度即可,比如对你的第一段代码的index做如下修改就能达到对角线赋值的效果:
a[index[0], index[1]] = 1.0
内容的提问来源于stack exchange,提问作者user3752629
相关产品推荐
相关产品推荐

