Numpy:对数组进行排序并找到相应索引的有效方法

时间:2019-03-27 15:48:38

标签: python numpy

我有一个numpy数组,想从原始数组中获取排序后的数组和相应的索引。例如。

arr = [2,1,3]
sorted_arr = [1,2,3]
sorted_indices = [1,0,2]

我知道我可以使用np.sort(arr)np.argsort(arr)分别找到它们。但是,有没有更有效的方法不需要对一个数组进行两次排序?

3 个答案:

答案 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)