[Python] numpy organiza las matrices en orden y luego restaura el orden original

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]]

Supongo que te gusta

Origin blog.csdn.net/weixin_38705903/article/details/112475621
Recomendado
Clasificación