2016-03-28 2 views
3

У меня есть NumPy массив как это:Как сортировать по убыванию с numpy?

A = array([[1, 3, 2, 7], 
      [2, 4, 1, 3], 
      [6, 1, 2, 3]]) 

Я хотел бы отсортировать строки этой матрицы в порядке убывания и получить аргументы отсортированного матрицы, как это:

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

я сделал следующее:

import numpy 
A = numpy.array([[1, 3, 2, 7], [2, 4, 1, 3], [6, 1, 2, 3]]) 
As = numpy.argsort(A, axis=1) 

Но это дает мне сортировку по возрастанию. Кроме того, после того, как я потратил некоторое время на поиск решения в Интернете, я ожидаю, что должен быть аргумент функции argsort от numpy, который изменит порядок сортировки. Но, видимо, нет такого аргумента! Зачем!?

Существует аргумент order. Я попытался, предположив, numpy.argsort(..., order=reverse), но он не работает.

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

import numpy 
A = numpy.array([[1, 3, 2, 7], [2, 4, 1, 3], [6, 1, 2, 3]]) 
As = numpy.argsort(A, axis=1) 
As = As[::-1] 

По какой-то причине, As = As[::-1] не дает мне желаемый результат.

Ну, я думаю, это должно быть просто, но я чего-то не хватает.

Как я могу отсортировать массив numpy в порядке убывания?

+2

Вы должны использовать 'np.argsort (A, ось = 1) [:, :: - 1]'. Используя только '[:: - 1]' меняет ось 0: вы хотите повернуть ось 1. –

+0

Я правильно понял, что 'As' - это не отсортированная версия' A' в вашем верхнем примере, а отсортированная версия другая матрица? – Swier

+0

Это аргумент сортированной версии 'A'. @Swier – Ribz

ответ

6

Просто умножить вашу матрицу на -1, чтобы в обратном порядке:

[In]: A = np.array([[1, 3, 2, 7], 
        [2, 4, 1, 3], 
        [6, 1, 2, 3]]) 
[In]: print(np.argsort(-A)) 
[Out]: [[3 1 2 0] 
     [1 3 0 2] 
     [0 3 2 1]] 
Смежные вопросы