You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:44:56