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

如何用Numpy操作根据二维索引数组提取二维ndarray的指定列元素?

Numpy按行提取指定列元素的向量化解决方案

你遇到的问题是因为直接使用arr[arr_idx]时,Numpy会将arr_idx中的每个元素视为行索引去提取整行,因此得到三维数组。要实现按行提取对应列的需求,需要构造与arr_idx匹配的行索引数组,结合列索引一起定位元素。

实现代码

import numpy as np

arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr_idx = np.array([[0,2],[1,2],[2,1]])

# 构造与arr_idx形状匹配的行索引数组
row_indices = np.arange(arr.shape[0])[:, np.newaxis]
# 同时使用行、列索引提取元素
result = arr[row_indices, arr_idx]

print(result)
# 输出结果:
# [[1 3]
#  [5 6]
#  [9 8]]

原理说明

  • np.arange(arr.shape[0])生成行号数组[0,1,2],通过[:, np.newaxis]将其转换为形状为(3,1)的列向量。
  • 这个列向量会和形状为(3,2)的arr_idx自动广播,形成形状为(3,2)的行索引矩阵,每个位置对应arr的行号,arr_idx对应列号。
  • 这种索引方式是完全向量化的,避免了循环,处理大数据量时效率远高于列表推导式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:12:56