np.bincount
не работает с 2D массива вдоль некоторой ось. Чтобы получить желаемый эффект с помощью одного векторизованного вызова до np.bincount
, можно создать 1D массив идентификаторов, чтобы разные строки имели разные идентификаторы, даже если эти элементы одинаковы. Это приведет к тому, что элементы из разных строк не будут объединены друг с другом при использовании одного вызова до np.bincount
с этими идентификаторами. Таким образом, такой идентификатор массив может быть создан с идеей linear indexing
в виду, например, так -
N = A.max()+1
id = A + (N*np.arange(A.shape[0]))[:,None]
Затем покормить идентификаторы np.bincount
и, наконец, изменить форму обратно в 2D -
np.bincount(id.ravel(),minlength=N*A.shape[0]).reshape(-1,N)
'bincount' (для скорости) и требует 1d-массив. Таким образом, ваше выражение выглядит хорошо. Как вы, кажется, понимаете, для повторной сборки результата в массив требуется постоянное количество ящиков. Эта проблема может быть причиной того, что 'bincount' равно 1d - его приложение к строкам общего массива 2d будет создавать оборванный список. – hpaulj
Я предполагаю, что это имеет смысл, но разве вы не думаете, что мое решение ниже выглядит странно? Это довольно распространенная ситуация в компьютерном обучении, чтобы таким образом вычислить количество строк. – maxymoo
Вопрос в 2013 году: может ли многоквартирный сборник работать с 2D-массивами ?: http://stackoverflow.com/questions/19201972/can-numpy-bincount-work-with-2d-arrays – hpaulj