Numpy同时对行和列使用相同idx索引选择的结果疑问
Numpy 索引规则说明
你遇到的输出差异本质是Numpy的**整数数组索引(花式索引)**和链式索引的规则不同:
1. A[idx, idx]的计算逻辑
当你向多维数组的多个索引位置传入长度相同的一维序列时,Numpy会执行逐元素配对的索引逻辑:
- 依次取两个索引序列对应位置的元素组成坐标,逐个提取数组值
- 最终返回和索引序列长度一致的一维数组
放到你的示例中,idx = [0,1],A[idx, idx]等价于依次取两个配对坐标的值:
- 第一个坐标:
A[0, 0]= 1 - 第二个坐标:
A[1, 1]= 5
所以最终输出是array([1, 5])
2. 和A[idx, :][:, idx]的差异
后者是两次独立的索引操作:
- 第一步
A[idx, :]先提取第0、1行,得到2行3列的中间数组:[[1,2,3], [4,5,6]] - 第二步
[:, idx]对中间数组提取所有行的第0、1列,最终得到2行2列的结果:[[1,2], [4,5]]
如果想要通过一次索引得到和第二种写法一致的2x2矩阵,可以将第一个索引调整为列向量触发广播机制:A[np.array(idx).reshape(-1, 1), idx],此时两个索引会广播为2x2的形状,提取所有坐标组合的对应值。
内容的提问来源于stack exchange,提问作者Mathieu
相关产品推荐
相关产品推荐

