寻找以下算法.
例如,给出以下无序列表:
main_list = np.array([100,200,400,1000,800,900,700,600,500,300])
并且给定对应于列表np.array([400, 900, 600, 300])
的查询列表元素q = np.array([2,5,7,9])
,直接从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]