Упорядочить данные в скобках на основе заданного порядка c в Python - PullRequest
1 голос
/ 20 февраля 2020

У меня есть массив, и после программирования я получаю позицию и значение ненулевых данных, которые выглядят как (x, y, z) = (строка, столбец, значение)

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

Это результат по порядку в «от наименьшего номера строки к самому высокому».

Есть ли способ, которым я могу сделать порядок результата в «наименьшем количестве столбцов до самого высокого», а также «наименьшем номер значения к высшему '?

Спасибо за любую помощь !!

Это код, который я использовал:

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

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Вы, конечно, можете сделать это,
В этом случае вы можете отсортировать list из tuples по key, что является 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

Надеюсь, это поможет вам!

1 голос
/ 20 февраля 2020

Вы можете использовать аргумент key во встроенной функции sorted(), чтобы изменить ключ на i-й индекс:

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