有时候会遇到一些场景,需要我们对数据排序后,进行某一些处理,然后又让我们的数据恢复成原来的排序,在网上搜了下发现没有现成的demo,所以这里记录一下
import numpy as np
arr = np.array([2, 1, 3, 5, 2, 44, 11])
print('原来顺序:', arr)
order = np.argsort(-arr)
arr = sorted(arr, reverse=True)
print('排序后顺序:',arr)
recovery_arr = np.zeros_like(arr)
for idx, num in enumerate(arr):
recovery_arr[order[idx]] = num
print('回复原来顺序:',recovery_arr)
输出结果为:
原来顺序: [ 2 1 3 5 2 44 11]
排序后顺序: [44, 11, 5, 3, 2, 2, 1]
回复原来顺序: [ 2 1 3 5 2 44 11]
如果是多维的情况的话,原理是一样的,不过要加多一层for循环
import numpy as np
arr = np.array([[2, 1, 3, 5, 2, 44, 11],[2, 1, 3, 5, 2, 44, 11]])
print('原来顺序:', arr)
order = np.argsort(-arr)
for idx in range(len(arr)):
arr[idx] = sorted(arr[idx], reverse=True)
print('排序后顺序:',arr)
recovery_arr = np.zeros_like(arr)
for idx, num in enumerate(arr):
for jdx, n in enumerate(num):
recovery_arr[idx, order[idx, jdx]] = n
print('回复原来顺序:',recovery_arr)
原来顺序:
[[ 2 1 3 5 2 44 11]
[ 2 1 3 5 2 44 11]]
排序后顺序:
[[44 11 5 3 2 2 1]
[44 11 5 3 2 2 1]]
回复原来顺序:
[[ 2 1 3 5 2 44 11]
[ 2 1 3 5 2 44 11]]