如何通过数组索引对Numpy二维数组索引以获取指定一维数组?
用NumPy数组索引实现二维到一维的元素提取
嘿,这个需求在NumPy里用高级索引就能轻松搞定!我直接上代码加解释,一看就明白。
首先,我们先定义好待索引的二维数组和对应的二维索引数组:
import numpy as np # 待索引的二维数组(3行3列示例) arr = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]) # 二维索引数组:每一行代表一个(row, col)坐标,我们要提取这些坐标对应的元素 indices = np.array([ [0, 1], # 对应arr[0][1] = 2 [1, 2], # 对应arr[1][2] = 6 [2, 0] # 对应arr[2][0] = 7 ])
接下来有两种常见的实现方式:
方式1:拆分索引数组为行、列索引
NumPy的高级索引支持传入两个形状匹配的一维数组,分别代表行索引和列索引,它会按位置一一对应提取元素:
# 从二维索引数组中拆分出所有行索引(取第一列)和列索引(取第二列) row_idx = indices[:, 0] col_idx = indices[:, 1] # 执行索引,直接得到一维结果 result = arr[row_idx, col_idx] print(result) # 输出: [2 6 7]
方式2:转置索引数组后转成元组(更简洁)
如果不想手动拆分,可以直接把二维索引数组转置,再转成元组传给数组索引,效果和上面完全一致:
# indices.T 会把(3,2)的数组转成(2,3),转成元组后就是(row_idx_array, col_idx_array) result = arr[tuple(indices.T)] print(result) # 同样输出: [2 6 7]
关键注意点
- 要确保二维索引数组里的每个(row, col)坐标都在待索引数组的有效范围内(比如示例中arr是3行3列,行/列索引只能是0、1、2),不然会触发索引越界错误。
- 不管你的二维索引数组有多少行(即多少个要提取的坐标),只要它是
(n, 2)的形状,这两种方法都适用。
内容的提问来源于stack exchange,提问作者squirl
相关产品推荐
相关产品推荐

