将 bincount 应用于 2D numpy 数组的每一行

max*_*moo 4 python numpy

有没有办法应用bincount“axis = 1”?所需的结果将与列表理解相同:

import numpy as np
A = np.array([[1,0],[0,0]])
np.array([np.bincount(r,minlength = np.max(A) + 1) for r in A])

#array([[1,1]
#       [2,0]])
Run Code Online (Sandbox Code Playgroud)

Div*_*kar 5

np.bincount不适用于沿某个轴的二维数组。为了通过对 的单个矢量化调用获得所需的效果np.bincount,可以创建一个一维 ID 数组,这样即使元素相同,不同的行也将具有不同的 ID。这将使来自不同行的元素在对np.bincount这些 ID使用单个调用时不会合并在一起。因此,可以在创建这样一个 ID 数组时考虑到一个想法linear indexing,就像这样 -

N = A.max()+1
id = A + (N*np.arange(A.shape[0]))[:,None]
Run Code Online (Sandbox Code Playgroud)

然后,将 ID 输入np.bincount并最终重塑回 2D -

np.bincount(id.ravel(),minlength=N*A.shape[0]).reshape(-1,N)
Run Code Online (Sandbox Code Playgroud)