Эквивалентный из Numpy.argsort () в основном Python? [дубликат]

47
задан Pierre GM 11 September 2012 в 20:13
поделиться

2 ответа

Моя альтернатива с перечислением:

def argsort(seq):
    return [x for x,y in sorted(enumerate(seq), key = lambda x: x[1])]

seq=[5,2,1,10]
print(argsort(seq))
# Output:
# [2, 1, 0, 3]

Лучше использовать ответ от https://stackoverflow.com/users/9990/marcelo-cantos ответ на тему сортировка Python без лямбда-выражений

[i for (v, i) in sorted((v, i) for (i, v) in enumerate(seq))]
7
ответ дан 26 November 2019 в 19:19
поделиться

Встроенной функции нет, но ее легко собрать из потрясающего Инструменты, которые предоставляет Python:

def argsort(seq):
    # http://stackoverflow.com/questions/3071415/efficient-method-to-calculate-the-rank-vector-of-a-list-in-python
    return sorted(range(len(seq)), key=seq.__getitem__)

x = [5,2,1,10]

print(argsort(x))
# [2, 1, 0, 3]

Он работает с Python array.array таким же образом:

import array
x = array.array('d', [5, 2, 1, 10])
print(argsort(x))
# [2, 1, 0, 3]
65
ответ дан 26 November 2019 в 19:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: