Я не уверен, как лучше это сделать в numpy
, но в чистом Python причина будет такой:
aargsort
содержит перестановку range(len(a))
, сообщающую вам, откуда поступили элементы aSort
- очень похоже на чистый Python:
>>> x = list('ciaobelu')
>>> r = range(len(x))
>>> r.sort(key=x.__getitem__)
>>> r
[2, 4, 0, 5, 1, 6, 3, 7]
>>>
Т.е. первый аргумент sorted(x)
будет x[2]
, второй x[4]
и т. Д.
Итак, учитывая отсортированную версию, вы можете восстановить оригинал, «положив предметы туда, откуда они пришли»:
>>> s = sorted(x)
>>> s
['a', 'b', 'c', 'e', 'i', 'l', 'o', 'u']
>>> original = [None] * len(s)
>>> for i, c in zip(r, s): original[i] = c
...
>>> original
['c', 'i', 'a', 'o', 'b', 'e', 'l', 'u']
>>>
Конечно, будут более жесткие и быстрые способы выразить это в numpy
(что, к сожалению, я не знаю изнутри так же хорошо, как сам Python ;-), но я надеюсь, что это поможет, показывая основная логика операции «положить вещи на место», которую нужно выполнить.