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

如何通过数组索引对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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:55:48