在NumPy中,sort() 可以对数组进行排序
argsort() 可以返回排序后的数组在原数组中的下标
举个例子:
原数组如下:
import numpy as np
a1 = np.array([10,6,8,2,5,4,9,1])
a1
## array([10, 6, 8, 2, 5, 4, 9, 1])
sort() 排序:
b1= np.sort(a1)
b1
## array([ 1, 2, 4, 5, 6, 8, 9, 10])
argsort() 得到原来的索引位置
i1 = np.argsort(a1)
i1
## array([7, 3, 5, 4, 1, 2, 6, 0], dtype=int64)
那么如何通过这个索引位置恢复到原来的数组呢?
则将上面的i1再进行一次argsort()运算,得到索引,按照索引去排序过后的b1中找
b1[np.argsort(i1)]
## array([10, 6, 8, 2, 5, 4, 9, 1])
题图是在《Python One-Liners》这本书里的,有兴趣的朋友,可以看一下哦
参考资料:
- 书籍《Python One-Liners》
2. https://stackoverflow.com/questions/2483696/undo-or-reverse-argsort-python