Количество вхождений элементов в каждом столбце двухмерного массива
Существует некоторая логика программы. Необходимо определить количество одинаковых элементов каждом столбце двумерного массива. Имеется следующий код:
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 может возвращать разное кол-во значений для разных колонок, поэтому этот вариант работает не всегда.