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

如何在NumPy中用索引数组直接切片二维数组获取最大值?

高效利用argmax结果提取NumPy数组最大值

针对你提出的需求,有两种高效的NumPy原生方法可以直接用argmax得到的索引提取最大值,无需重构数组或额外循环:

方法一:高级索引直接定位

利用行索引数组与idx列索引数组配对,直接从原数组中提取对应位置的值,这是最简洁高效的方式:

import numpy as np
a = np.arange(27).reshape(9, 3)
idx = np.argmax(a, axis=1)
# 生成行索引数组,与idx一一对应
row_indices = np.arange(a.shape[0])
max_val = a[row_indices, idx]

这里np.arange(a.shape[0])生成与数组行数一致的行索引,和idx的列索引组合后,直接定位到每行最大值的位置,完全不需要修改原数组结构,性能和np.max持平。

方法二:使用np.take_along_axis

这个函数专门用于根据指定轴上的索引提取元素,可读性更强:

import numpy as np
a = np.arange(27).reshape(9, 3)
idx = np.argmax(a, axis=1)
# 将idx转换为二维数组,匹配原数组的轴维度
max_val = np.take_along_axis(a, idx[:, np.newaxis], axis=1).squeeze()

idx[:, np.newaxis]把一维的索引数组转为二维(形状变为(9,1)),让它和原数组在axis=1维度上匹配,提取后用squeeze()去掉多余的维度,得到和np.max输出一致的一维数组。

这两种方法都避免了转置数组或Python循环带来的额外开销,完美复用已有的idx结果,效率和直接调用np.max几乎没有差异。

内容的提问来源于stack exchange,提问作者John M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:05:54