Tengo una matriz y después de la programación, obtengo la posición y el valor de los datos que no son cero, que se ve como (x, y, z) = (fila, columna, valor)

[(0, 0, 1), (0, 1, 1), (1, 0, 1), (2, 3, 2), (3, 0, 3), (3, 1, 3), (3, 3, 2)]

Este resultado se ordena en 'el menor número de fila al más alto'.

¿Hay algún método en el que pueda ordenar el resultado en 'el menor número de columna al más alto' y también 'el menor número de valor al más alto'?

¡¡Gracias por cualquier ayuda!!

Este es el código que usé:

import numpy as np

groupMatrix = np.array([
[1, 1, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 2],
[3, 3, 0, 2]
])
i = np.nonzero(groupMatrix)

res = np.vstack([i, groupMatrix[i]])
print(list(zip(*res)))
1
Joanne 20 feb. 2020 a las 07:16

2 respuestas

La mejor respuesta

Ciertamente puedes hacer eso,
En este caso, puede ordenar el list de tuples por key, que es el column

import numpy as np

groupMatrix = np.array([
[1, 1, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 2],
[3, 3, 0, 2]
])
i = np.nonzero(groupMatrix)

res = np.vstack([i, groupMatrix[i]])
arr = list(zip(*res))

col_sorted = sorted(arr, key=lambda item: item[1]) # sorted by column
val_sorted = sorted(arr, key=lambda item: item[2]) # sorted by value

¡Espero que te ayude!

1
Shubham Sharma 20 feb. 2020 a las 04:24

Puede usar el argumento key en la función integrada sorted() para cambiar la clave al i-ésimo índice:

array = [(0, 0, 1), (0, 1, 1), (1, 0, 1), (2, 3, 2), (3, 0, 3), (3, 1, 3), (3, 3, 2)]

ascending_column_order = sorted(array, key=lambda x: x[1])
1
alec 20 feb. 2020 a las 04:21