Вы можете сделать это с np.argsort()
и небольшим кусочком.Используя ваш пример массива:
arr = np.array([[0, 1, 0, 0, 0],
[1, 0, 0, 0, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 0, 1],
[1, 0, 3, 4, 4]])
arr[:, np.argsort(arr[-1, :])]
# array([[1, 0, 0, 0, 0],
# [0, 1, 0, 0, 0],
# [0, 0, 0, 1, 0],
# [0, 0, 0, 0, 1],
# [0, 1, 3, 4, 4]])
В основном np.argsort(arr[-1, :])
возвращает индексы последней строки arr
в порядке возрастания значения содержимого этого последнего ряда.Это возвращает array([1, 0, 2, 3, 4])
для приведенного вами примера.
Затем мы просто берем все строки со столбцами в указанном порядке с помощью arr[:, np.argsort(arr[-1, :])]
.