我有一个numpy数组,想从原始数组中获取排序后的数组和相应的索引。例如。
arr = [2,1,3]
sorted_arr = [1,2,3]
sorted_indices = [1,0,2]
我知道我可以使用np.sort(arr)
和np.argsort(arr)
分别找到它们。但是,有没有更有效的方法不需要对一个数组进行两次排序?
答案 0 :(得分:2)
是的,您可以使用argsort来获取已排序的数组。
import numpy as np
arr = np.array([2,1,3])
sorted_indices = np.argsort(arr)
sorted_arr = arr[sorted_indices]
答案 1 :(得分:2)
您无需排序两次。如果需要对数组进行排序的索引,则需要np.argsort
,但是要对arr
中的值进行排序,只需要对np.argsort
的结果进行索引:>
s = np.argsort(arr)
# array([1, 0, 2])
arr[s]
# array([1, 2, 3])
答案 2 :(得分:0)
您可以使用enumerate
将列表元素及其索引存储在同一列表中:
arr = [(x, i) for i,x in enumerate(arr)]
# Now you can use np.sort(arr) and unpack as necessary
np.sort(arr)
array([[0, 2],
[1, 1],
[2, 3]])
for x, idx in np.sort(arr):
print(x, idx)