Сортировка рядов numpy.array на основе точного компонента - PullRequest
2 голосов
/ 24 мая 2019

У меня есть массив, подобный следующему

import numpy as np
a=np.array([[3.1,10,6.],[7.,4,8.1]])

, и я хочу изменить порядок строк таким образом, чтобы второй элемент строк увеличивался.Итак, я хочу следующий вывод

[[ 7.   4.   8.1]
 [ 3.1 10.   6. ]]

, потому что 4<10.

Способ, которым я это делаю, - это преобразовать его в список.Тогда я мог бы использовать sort и навязать, что порядок должен быть выполнен на основе второго элемента, используя key:

def f(x):
    return x[1]

b=list(a)
b.sort(key=f)
a=np.array(b)
print a

Мне не нравится этот подход, возможно ли сделатьэто без преобразования массива в список, например, с помощью np.sort или каким-либо другим методом?

1 Ответ

3 голосов
/ 24 мая 2019

np.argsort вернет индексы, которые сортируют одномерный массив.Таким образом, вы хотите отсортировать a, используя индексы, которые будут сортировать a[:,1] - вторые элементы каждой строки в a.

Вы можете сделать это с

a[np.argsort(a[:,1])]

# array([[  7. ,   4. ,   8.1],
#        [  3.1,  10. ,   6. ]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...