Как получить индекс столбцов из двумерного массива, содержащего не более 3 значений - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть массив:

a = np.array([[22,11,44,33,66],
              [22,11,2,1,66],
              [1,11,44,22,4],
              [22,11,88,99,66]])

и в качестве вывода я хочу массив, содержащий индекс максимум 3 значения в виде 2d массива. Например, для вышеприведенного вывода массива будет:

array([[4,2,3],
       [4,0,1],
       [2,3,1],
       [3,2,4]])

1 Ответ

0 голосов
/ 11 ноября 2018

Чтобы получить верхние k элементы массива, разбиение it. Поскольку разбиение обычно дает вам k самые низкие элементы, используйте обратные индексы:

k = 3
top = np.argpartition(a, -k, axis=1)[:, -k:]

Если вам нужно отсортировать индексы в порядке убывания, используйте np.argsort с результатом:

rows = np.arange(a.shape[0])[:, None]
s = np.argsort(a[rows, top], axis=1)[:, ::-1]
top = top[rows, s]

rows необходимо, чтобы убедиться, что все индексы выбраны правильно, когда вы выполняете индексирование с помощью top и s. Индексы для каждой строки необходимо поменять местами ([:, ::-1]), чтобы получить возрастающий порядок.

...