Максимальная частота 1d массива в 2d массиве - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть двумерный массив:

array([[21, 17, 11],
   [230, 231, 232],
   [21, 17, 11]], dtype=uint8)

Я хочу найти массив 1d, который встречается чаще.Для вышеуказанного 2d массива это: [21, 17, 11].Это что-то вроде режима в статистике.

1 Ответ

0 голосов
/ 24 сентября 2018

Мы можем использовать np.unique с его необязательным аргументом return_counts, чтобы получить счетчики для каждой уникальной строки и, наконец, получить argmax(), чтобы выбрать тот с максимальным количеством -

# a is input array
unq, count = np.unique(a, axis=0, return_counts=True)
out = unq[count.argmax()]

Для данных типа uint8 мы также можем преобразовать в 1D, сократив каждую строку до скалярной, а затем использовать np.unique -

s = 256**np.arange(a.shape[-1])
_, idx, count = np.unique(a.dot(s), return_index=True, return_counts=True)
out = a[idx[count.argmax()]]

Если мы работаем с цветомДля изображений, которые 3D (последняя ось является цветовым каналом) и которые хотят получить наиболее доминирующий цвет, нам нужно изменить форму на a.reshape(-1,a.shape[-1]) и затем передать ее предлагаемым методам.

...