сортировка через argsort - обобщение на 2d матрицы - PullRequest
0 голосов
/ 01 ноября 2019

Для сортировки numy через argsort мы можем сделать:

import numpy as np

x = np.random.rand(3)
x_sorted = x[np.argsort(x)]

Я ищу решение numpy для обобщения на два или более измерения.

Индексация как в1-й случай не будет работать для 2-мерных матриц.

Y = np.random.rand(4, 3)
sort_indices = np.argsort(Y)
#Y_sorted = Y[sort_indices] (what would that line be?)

Связанный: я ищу чистый тупой ответ, который решает ту же проблему, что и решенная в этом ответе: https://stackoverflow.com/a/53700995/2272172

1 Ответ

2 голосов
/ 01 ноября 2019

Использование np.take_along_axis :

import numpy as np

np.random.seed(42)

x = np.random.rand(3)
x_sorted = x[np.argsort(x)]

Y = np.random.rand(4, 3)
sort_indices = np.argsort(Y)

print(np.take_along_axis(Y, sort_indices, axis=1))

print(np.array(list(map(lambda x, y: y[x], np.argsort(Y), Y))))  # the solution provided 

Выход

[[0.15599452 0.15601864 0.59865848]
 [0.05808361 0.60111501 0.86617615]
 [0.02058449 0.70807258 0.96990985]
 [0.18182497 0.21233911 0.83244264]]

[[0.15599452 0.15601864 0.59865848]
 [0.05808361 0.60111501 0.86617615]
 [0.02058449 0.70807258 0.96990985]
 [0.18182497 0.21233911 0.83244264]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...