Numpy索引切片后轴顺序改变,形状不符预期问题咨询
Numpy整数数组索引的维度重排问题
问题原因
你遇到的是Numpy整数数组索引(高级索引)的默认行为:当使用整数数组(比如[1,2])进行索引时,Numpy会将该索引对应的维度移动到结果的最前面,而不是保留它在原数组中的位置。
具体到你的代码:
- 原数组
x的形状是(1,5,3,4) - 索引操作
x[0, :, :, [1,2]]中:0是对第0轴的标量索引,会直接消除该轴:是对第1、2轴的切片索引,保持原维度顺序和形状[1,2]是对第3轴的整数数组索引,这部分对应的维度会被前置
- 所以最终结果的维度顺序变成:整数索引的维度(长度2)→ 切片的维度(5,3),也就是
(2,5,3)
解决方法
如果想要保持原维度顺序(得到(5,3,2)),可以用以下几种方式:
1. 使用连续切片(适用于索引连续的情况)
如果你的索引是连续的(比如1到2),直接用切片代替整数数组:
y = x[0, :, :, 1:3] print(y.shape) # 输出 (5, 3, 2)
2. 转置调整维度顺序
对于不连续的索引,可以先获取结果再转置:
y = x[0, :, :, [1,2]].transpose(1, 2, 0) print(y.shape) # 输出 (5, 3, 2)
3. 使用np.take指定轴
np.take可以直接在指定轴上选取元素,不会改变维度顺序:
y = np.take(x[0], [1,2], axis=2) print(y.shape) # 输出 (5, 3, 2)
内容的提问来源于stack exchange,提问作者Hajin Lee
相关产品推荐
相关产品推荐

