Допустим, у меня есть двумерный массив:
a = np.random.randint(0,10,(20,5))
Я хочу получить две строки-максимальные суммы строк-индексов, но рассматривая их как группы.
Так что в этом случае я хочу разделить 20 строк на 5 групп, получить сумму. (ось = 1) и выбрать максимум в группе.
После того, как у меня будет пять максимумов (для каждой группы), я хочу выбрать два индексы строк с самыми большими значениями (на основе исходного массива)
a.sum(axis=1)
... get max in all 5 groups
... pick two biggest
... argwhere() of those two
asum.reshape((4,5))
array([[18, 27, 23, 18, 26],
[34, 24, 23, 15, 30],
[16, 26, 21, 24, 16],
[21, 24, 29, 23, 23]])
a.sum(axis=1).reshape((4,5)).argmax(axis=1)
Out[55]: array([1, 0, 1, 2])
теперь мне нужно преобразовать их в одномерные индексы ..
idxs = a.sum(axis=1).reshape((4,5)).argmax(axis=1) + np.arange(0,4) * 5
array([ 1, 5, 11, 17])
теперь я должен выбрать два лучших, учитывая эти различия!?
хмм ... некрасиво ...
: asum
array([18, 27, 23, 18, 26, 34, 24, 23, 15, 30, 16, 26, 21, 24, 16, 21, 24, 29, 23, 23])
idxs[np.argsort(asum[idxs])][::-1][:2]
array([ 5, 17])