Пользовательский прерыватель связи для argsort () в numpy - PullRequest
2 голосов
/ 19 октября 2019

У меня есть два массива v и c (может считываться как стоимость и стоимость).

Мне нужно выполнить argsort() на v, так что если 2 элемента в vто же самое, тогда их нужно отсортировать по соответствующим элементам в c.

Пример

v = [4,1,4,4] # Here 0th, 2nd and 3rd elemnt are equal
c = [5,0,30,10]
numpy.argsort(v) = [1,0,2,3] # equal values sorted by index 

Требуемый вывод

[1,0,3,2] # c[0] < c[3] < c[2]

Как этого добитьсяв Python?

1 Ответ

3 голосов
/ 19 октября 2019

Функция argsort получает параметр order из документов:

Когда a является массивом с определенными полями, этот аргумент указывает, какие поля сравнивать первыми,второй и т. д.

Таким образом, вы можете создать структурированный массив из двух значений и передать поля в следующем порядке:

import numpy as np

v = [4, 1, 4, 4]  
c = [5, 0, 30, 10]

s = np.array(list(zip(v, c)), dtype=[('value', 'i4'), ('cost', 'i4')])
result = np.argsort(s, order=['value', 'cost'])

print(result)

Выход

[1 0 3 2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...