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

如何理解NumPy中arr[ind1,ind2]的多维索引逻辑?

NumPy数组配对索引原理解析

先看原数组的实际内容,方便后续对照:

import numpy as np
arr = np.arange(9, dtype = "float").reshape(3,3)
# 输出arr:
# [[0. 1. 2.]
#  [3. 4. 5.]
#  [6. 7. 8.]]

核心逻辑:逐位置配对的行+列索引

arr[ind1, ind2]属于NumPy的整数数组索引,规则很直接:

  • ind1里的每个元素对应目标元素的行索引,ind2对应位置的元素对应目标元素的列索引
  • 两个索引数组的形状必须完全一致(这里都是2×2),最终输出的形状和索引数组的形状完全相同

我们逐个位置拆解取值逻辑:

  • 第0行第0列:ind1[0,0]=1(行1),ind2[0,0]=0(列0)→ 取arr[1,0] = 3.0
  • 第0行第1列:ind1[0,1]=2(行2),ind2[0,1]=2(列2)→ 取arr[2,2] = 8.0
  • 第1行第0列:ind1[1,0]=0(行0),ind2[1,0]=1(列1)→ 取arr[0,1] = 1.0
  • 第1行第1列:ind1[1,1]=1(行1),ind2[1,1]=2(列2)→ 取arr[1,2] = 5.0

把这些结果按索引数组的2×2形状排列,就得到arr[ind1, ind2]的输出:

[[3. 8.]
 [1. 5.]]

为什么输出是2×2矩阵?

因为ind1和ind2都是2×2的二维数组,NumPy会严格按照索引数组的形状生成结果——每个索引位置对应一个取值,最终结果的维度和索引数组完全一致。

和单索引的区别

你已经理解的arr[ind1]是取整行:比如ind1[0,0]=1会取第1行的所有元素[3. 4. 5.],最终输出是3×3的数组;而arr[ind1, ind2]是精准定位到单个元素,通过行+列的配对组合,直接提取对应位置的标量,再按索引形状重组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 08:22:11