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

numpy索引时用slice与range为何返回不同的数组形状

Numpy slice与range索引的形状差异原因

这是numpy对基础索引和高级索引的不同形状拼接规则导致的:

  • slice属于基础索引,索引结果的轴顺序完全和原数组保留轴的顺序一致:标量索引会直接删除对应轴,slice则保留对应轴的长度。
  • range会被转换为整数数组,属于高级索引,和基础索引混用时的形状规则:
    • 若高级索引没有被slice/省略号隔开、直接位于所有保留的基础索引末尾,高级索引的形状会直接追加到基础索引结果的形状之后
    • 若高级索引的位置被slice/省略号和其他索引隔开,高级索引的形状会被插入到所有基础索引保留轴的最前方

第一个断言通过原因

两种写法返回形状均为(1,2):

  • d[:, 0, slice(0,2)]是基础索引::保留第一轴长度1,0是标量删除第二轴,slice(0,2)保留第三轴长度2,最终形状为(1,2)
  • d[:, 0, range(0,2)]的高级索引在所有保留基础索引的末尾,没有被其他slice隔开,形状为(2,)的高级索引直接追加到基础结果形状(1,)之后,最终形状为(1,2),二者一致。

第二个断言失败原因

两种写法的轴拼接顺序不同:

  • d[0, :, slice(0,2)]是基础索引,最终轴顺序和原数组保留的轴顺序完全一致,得到形状(1,2)
  • d[0, :, range(0,2)]属于高级索引和基础索引混用的场景,高级索引的位置被中间的slice隔开,最终高级索引对应的轴会被移动到基础保留轴的前方,得到形状(2,1),二者顺序相反因此断言失败。

内容的提问来源于stack exchange,提问作者t1e2a2p6

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:54:06