【Python】numpy将数组按顺序排列后又重新还原原来顺序的方法

前言

有时候会遇到一些场景,需要我们对数据排序后,进行某一些处理,然后又让我们的数据恢复成原来的排序,在网上搜了下发现没有现成的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]]

你可能感兴趣的:(Python)