Prefacio
A veces nos encontraremos con algunos escenarios que requieren que clasifiquemos los datos, realicemos algún procesamiento y luego restauremos nuestros datos a la clasificación original. Busqué en Internet y descubrí que no hay una demostración lista para usar, así que aquí hay un registro
Situación unidimensional
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)
La salida es:
原来顺序: [ 2 1 3 5 2 44 11]
排序后顺序: [44, 11, 5, 3, 2, 2, 1]
回复原来顺序: [ 2 1 3 5 2 44 11]
Situación multidimensional
Si es multidimensional, el principio es el mismo, pero se necesita un bucle for más
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]]