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

基于预计算排序数组的查询元素排序实现(Numpy)

问题与解决方案

需求描述

给定如下无序数组:

import numpy as np
main_list = np.array([100,200,400,1000,800,900,700,600,500,300])

以及查询索引列表 q = np.array([2,5,7,9])(对应元素为 np.array([400, 900, 600, 300])),需要直接获取main_list中对应元素的排序结果及原位置,期望输出:

np.array([300, 400, 600, 900])
np.array([9,2,7,5])

核心要求:仅使用预计算的排序数组,避免每次查询时执行排序操作。

Numpy解决方案(感谢@cary-swoveland)

离线预计算步骤

预先计算两个排序索引数组,后续查询直接复用:

argsort = np.argsort(main_list)
argsort_argsort = np.argsort(argsort)

查询阶段

基于预计算的数组,快速得到排序后的原索引和对应元素:

q = np.array([2,5,7,9])

new_array = np.full(main_list.shape[0], -1)
new_array[argsort_argsort[q]] = q

sorted_q = new_array[new_array != -1]
sorted_values = main_list[sorted_q]

print(sorted_q)
print(sorted_values)

执行结果

运行上述代码后,输出如下:

[9 2 7 5]
[300 400 600 900]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:07:15