Этот вопрос задает вопрос о сортировке одномерных массивов, даны два решения, первое предлагает с использованием argsort
дважды , второе, более эффективное по времени, использует его только один раз . Что если бы я хотел ранжировать двумерный массив по очереди, как это?
Использование argsort
дважды - это одна возможность:
def rank(x, axis=-1):
return np.argsort(np.argsort(x, axis=axis), axis=axis)
Для данных:
x = np.array([
[1, 2, 30],
[4, 5, 6],
[90, 8, 7],
[12, 15, 10]
])
возвращает правильные результаты:
rank(x, axis=0)
## array([[0, 0, 3],
## [1, 1, 0],
## [3, 2, 1],
## [2, 3, 2]])
rank(x, axis=1)
## array([[0, 1, 2],
## [0, 1, 2],
## [2, 1, 0],
## [1, 2, 0]])
Но есть ли более эффективный подход?