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

Numpy索引维度顺序不符合预期的问题咨询

Numpy混合索引的形状疑惑解答

先看代码示例的输出:

>>> np.arange(24).reshape(2,3,4)[0,:,[2,3]].shape
(2,3)
>>> np.arange(24).reshape(2,3,4)[0,[1,2],:].shape
(2,4)

问题

能理解第二个输出结果,但为何第一个结果不是(3,2)?

第一种情况里,前两个索引0和:属于基础索引,最后一个索引[2,3]属于高级索引。按道理先处理基础索引生成形状为(3,4)的视图,再处理高级索引应该得到(3,2)的副本,但实际结果却把单个整数索引0当作了高级索引组的一部分,这让人困惑。

原因解析

问题出在Numpy混合索引的分组规则上:

  • 当索引中同时存在标量索引(比如这里的0)、切片(:)和高级索引([2,3])时,Numpy会把标量索引和高级索引归为同一组,切片单独作为另一组。
  • 第一个例子的索引分组为:(0, [2,3]) 是一组,(:) 是另一组。高级索引组的形状是(2,)(因为[2,3]长度为2),切片组的形状是(3,),最终结果的形状是高级索引组形状 + 切片组形状,也就是(2,3)。
  • 第二个例子的索引分组为:(0, [1,2]) 是一组,(:) 是另一组。高级索引组形状是(2,),切片组形状是(4,),所以结果是(2,4),和你的理解一致。

只有当高级索引和基础索引的维度完全连续时,才会先处理全部基础索引再应用高级索引。比如如果是[:, :, [2,3]],前两个切片是连续的基础索引,处理后得到(2,3,4),再取最后两列就会得到(2,3,2),这时候形状是基础索引形状加上高级索引长度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:00:09