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

numpy数组嵌套索引的概念解析及结果含义问询

理解numpy中arr1[arr2,:]的索引逻辑

首先明确两个数组的基础信息:

  • arr1是形状为(4,5)的二维数组,包含4个行向量,行索引为0、1、2、3:
    arr1 = np.array([[2, 2, 2, 2, 1],
                     [1, 3, 1, 3, 2],
                     [2, 2, 2, 1, 3],
                     [1, 1, 1, 3, 2]])
    
  • arr2是形状为(4,8)的二维数组,所有元素都是0-3的整数,这些整数是用来索引arr1的行号:
    arr2 = np.array([[1, 3, 1, 1, 3, 3, 2, 2],
                     [2, 3, 2, 2, 2, 3, 2, 1],
                     [3, 3, 3, 1, 1, 3, 3, 3],
                     [1, 1, 2, 1, 2, 1, 1, 1]])
    

核心逻辑:整数数组索引的替换规则

arr1[arr2,:]属于numpy的整数数组索引操作,本质是:

  1. 遍历arr2中的每一个元素,将其作为arr1的行索引,提取arr1对应行的完整数据(长度为5的数组);
  2. 提取后的所有行数据,严格按照arr2的原始形状(4行8列)进行排列,最终形成形状为(4,8,5)的三维数组。

对应关系示例

以arr2的第一行为例:
arr2[0] = [1, 3, 1, 1, 3, 3, 2, 2]

  • 元素1 → 提取arr1[1] → [1, 3, 1, 3, 2](结果数组第0行第0个元素)
  • 元素3 → 提取arr1[3] → [1, 1, 1, 3, 2](结果数组第0行第1个元素)
  • 元素2 → 提取arr1[2] → [2, 2, 2, 1, 3](结果数组第0行第6、7个元素)

这和给出的结果数组第一行完全匹配:

[[1, 3, 1, 3, 2],
 [1, 1, 1, 3, 2],
 [1, 3, 1, 3, 2],
 [1, 3, 1, 3, 2],
 [1, 1, 1, 3, 2],
 [1, 1, 1, 3, 2],
 [2, 2, 2, 1, 3],
 [2, 2, 2, 1, 3]]

结果形状的由来

arr2的形状是(4,8),每个位置的单个整数被替换成arr1中长度为5的行向量,因此最终结果的维度是(4,8,5):

  • 第一个维度:继承arr2的行数(4)
  • 第二个维度:继承arr2的列数(8)
  • 第三个维度:继承arr1的列数(5)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:05:21