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

为何numpy数组arr3d[0,:,[0,1,2]]与arr3d[0][:,[0,1,2]]结果不同?

Numpy数组索引结果差异问题解答

先看你给出的代码:

import numpy as np
a=np.ones((1,4,4))
shape1=a[0,:,[0,1,2]].shape
shape2=a[0][:,[0,1,2]].shape

得到shape1=(3,4),shape2=(4,3),核心原因是两种索引操作的执行逻辑完全不同:

  • a[0,:,[0,1,2]]:一步式混合索引
    原数组a的形状是(1,4,4),这行代码是把三个索引参数放在同一个方括号里,属于基本索引(0和:)与高级整数数组索引([0,1,2])的混合使用。
    Numpy处理混合索引时,会优先将所有高级索引对应的维度排列在结果形状的前面:这里[0,1,2]是长度为3的整数数组,对应一个维度;:对应原数组中长度为4的维度。所以最终形状是(3,4)。

  • a[0][:,[0,1,2]]:分步式索引
    这是两次独立的索引操作:

    1. 第一步a[0]:从原数组中取出第一个维度的元素,把(1,4,4)的数组降维成(4,4)的二维数组;
    2. 第二步[:,[0,1,2]]:对这个二维数组做列索引,取出每一行的第0、1、2列,相当于保留4行,选取3列,所以结果形状是(4,3)。

内容的提问来源于stack exchange,提问作者孟文明

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:55:27