Как эффективно заказать матовую матрицу - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть этот массив NumPy

matrix = np.array([[ 0.8,  0.2,  0.1],
   [ 1. ,  0. ,  0. ],
   [ 0. ,  0. ,  1. ]])

, и я хотел бы отфильтровать, чтобы вернуть для каждой строки matrix индексы в порядке убывания значения.

Например, этобыло бы

np.array([[0, 1, 2], [0, 1, 2], [2, 0, 1]])

Я знаю, что мог бы использовать np.argsort, но это, похоже, не возвращает правильный вывод.Я попытался изменить axis на другие значения, но это тоже не помогло.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Вероятно, самый простой способ получить желаемый результат:

(-matrix).argsort(axis=1)
# array([[0, 1, 2],
#        [0, 1, 2],
#        [2, 0, 1]])
0 голосов
/ 29 ноября 2018

Я думаю, что np.argsort, кажется, делает свое дело, вам просто нужно убедиться, что матрица перевернута горизонтально, чтобы уменьшить ее в порядке:

>>>matrix = np.array(
[[ 0.8,  0.2,  0.1],
[ 1. ,  0. ,  0. ],
[ 0. ,  0. ,  1. ]])

>>> np.fliplr(np.argsort(matrix))
array([[0, 1, 2],
       [0, 2, 1],
       [2, 1, 0]])

Это должно быть правильным выводом, если у вас нетлюбые требования к сортировке галстуков.Прямо сейчас щелчок заставит самый правый связать первый индекс.Если вы хотите, чтобы ваш точный вывод совпадал с первым крайним левым индексом, вы можете сделать немного жонглирования:

# Flip the array first and get the indices
>>> flipped = np.argsort(np.fliplr(matrix))

# Subtract the width of your array to reverse the indices
# Flip the array to be in descending order
>>> np.fliplr(abs(flipped - flipped.shape[1]))
array([[0, 1, 2],
       [0, 1, 2],
       [2, 0, 1]])
...