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的整数数组索引操作,本质是:
- 遍历
arr2中的每一个元素,将其作为arr1的行索引,提取arr1对应行的完整数据(长度为5的数组); - 提取后的所有行数据,严格按照
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
相关产品推荐
相关产品推荐

