Сортировка строк и столбцов матрицы

Как посортить строки/столбцы в матричке numpy по кастомному ключу (например, отсортировать столбцы по произведению 1ой и второй строки)? a.sort() делает что-то странное и не то.

Пример 1

[[1,8,3],
 [4,5,6],
 [7,2,9]]

Сортируем строки по возрастанию по второму столбцу:

[[7,2,9],
 [4,5,6],
 [1,8,3]]

Пример 2

[[1,8,3],
 [4,5,6],
 [7,2,9]]

Сортируем строки по возрастанию по произведение 2 и 3 столбцов:

[[7,2,9],
 [1,8,3],
 [4,5,6]]

Ответы (1 шт):

Автор решения: MaxU

Воспользуйтесь методом ndarray.argsort():

Пример 1:

In [26]: a
Out[26]:
array([[1, 8, 3],
       [4, 5, 6],
       [7, 2, 9]])

In [27]: res = a[a[:, 1].argsort()]

In [28]: res
Out[28]:
array([[7, 2, 9],
       [4, 5, 6],
       [1, 8, 3]])

Пример 2:

In [22]: a
Out[22]:
array([[1, 8, 3],
       [4, 5, 6],
       [7, 2, 9]])

In [23]: res = a[(a[:, 1] * a[:, 2]).argsort()]

In [24]: res
Out[24]:
array([[7, 2, 9],
       [1, 8, 3],
       [4, 5, 6]])
→ Ссылка