Количество вхождений элементов в каждом столбце двухмерного массива

Существует некоторая логика программы. Необходимо определить количество одинаковых элементов каждом столбце двумерного массива. Имеется следующий код:

import numpy as np
a = np.array([[1, 2, 3, 1, 0],
              [3, 2, 4, 3, 1],
              [1, 3, 1, 0, 4],
              [1, 0, 2, 0, 2],
              [0, 0, 4, 3, 4]])
b = np.zeros_like(a)
for i in range(a.shape[1]):
    b[:, i] = np.bincount(a[:, i], minlength=a.shape[0])

Результат работы:

[[1 2 0 2 1]
 [3 0 1 1 1]
 [0 2 1 0 1]
 [1 1 1 2 0]
 [0 0 2 0 2]]

Все работает корректно, однако хотелось бы избавится от употребления явного цикла, так как реальный массив может иметь достаточно большую размерность. Возможно ли это сделать?


Ответы (1 шт):

Автор решения: CrazyElf

Максимум что можно сделать:

b = np.apply_along_axis(lambda x: np.bincount(x, minlength=a.shape[0]), axis=0, arr=a)

Подсмотрено на английском SO.

Более простой вариант к сожалению не работает на ваших данных:

b = np.apply_along_axis(np.bincount, 0, m)

Проблема в том, что bincount может возвращать разное кол-во значений для разных колонок, поэтому этот вариант работает не всегда.

→ Ссылка