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

如何获取NumPy数组中N个最大值的索引并保持原出现顺序?

保持原数组出现顺序获取N个最大值的索引

我太懂你的需求了——之前那个方法确实能拿到数组里前N个最大值的索引,但它们是按数值从大到小排的,而你想要这些索引严格保持在原数组里的先后出现顺序对吧?

举个你提到的例子:
原数组是:

import numpy as np
arr = np.array([1, 3, 2, 4, 5])

用原方法arr.argsort()[-3:][::-1]得到的是array([4, 3, 1]),但你期望的结果是array([1, 3, 4])——也就是这些索引在原数组里出现的先后顺序。

解决方案其实很简单

核心思路就是:先拿到前N大值的索引,再把这些索引按原数组中的位置重新排序就行。

方法一:用Python内置排序

import numpy as np

arr = np.array([1, 3, 2, 4, 5])
n = 3  # 要取的最大值个数

# 第一步:获取前N大元素的索引(按数值从大到小)
top_n_indices = arr.argsort()[-n:][::-1]
# 第二步:对索引按原数组中的出现顺序排序
result = np.array(sorted(top_n_indices))

print(result)
# 输出:array([1, 3, 4])

方法二:用Numpy的排序(更高效)

如果你的数组很大,用Numpy原生的排序方法速度会更快:

result = np.sort(top_n_indices)
print(result)
# 同样输出:array([1, 3, 4])

验证一下重复值的情况

比如数组里有重复最大值的情况:

arr = np.array([5, 3, 5, 2, 4])
n = 3
top_n_indices = arr.argsort()[-n:][::-1]  # 得到 [0, 2, 4]
result = np.sort(top_n_indices)
print(result)  # 输出 [0 2 4],完全符合原数组的出现顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:48:28