¿Puede el numink bincount trabajar con matrices 2D?

Estoy viendo un comportamiento con una gran cantidad de personas que no puedo entender. Quiero agrupar los valores en una matriz 2D de forma fila y ver el comportamiento a continuación. ¿Por qué funcionaría con dbArray pero fallaría con simarray?

>>> dbArray array([[1, 0, 1, 0, 1], [1, 1, 1, 1, 1], [1, 1, 0, 1, 1], [1, 0, 0, 0, 0], [0, 0, 0, 1, 1], [0, 1, 0, 1, 0]]) >>> N.apply_along_axis(N.bincount,1,dbArray) array([[2, 3], [0, 5], [1, 4], [4, 1], [3, 2], [3, 2]], dtype=int64) >>> simarray array([[2, 0, 2, 0, 2], [2, 1, 2, 1, 2], [2, 1, 1, 1, 2], [2, 0, 1, 0, 1], [1, 0, 1, 1, 2], [1, 1, 1, 1, 1]]) >>> N.apply_along_axis(N.bincount,1,simarray) Traceback (most recent call last): File "", line 1, in  N.apply_along_axis(N.bincount,1,simarray) File "C:\Python27\lib\site-packages\numpy\lib\shape_base.py", line 118, in apply_along_axis outarr[tuple(i.tolist())] = res ValueError: could not broadcast input array from shape (2) into shape (3) 

El problema es que bincount no siempre devuelve los mismos objetos en forma, en particular cuando faltan valores. Por ejemplo:

 >>> m = np.array([[0,0,1],[1,1,0],[1,1,1]]) >>> np.apply_along_axis(np.bincount, 1, m) array([[2, 1], [1, 2], [0, 3]]) >>> [np.bincount(m[i]) for i in range(m.shape[1])] [array([2, 1]), array([1, 2]), array([0, 3])] 

funciona, pero

 >>> m = np.array([[0,0,0],[1,1,0],[1,1,0]]) >>> m array([[0, 0, 0], [1, 1, 0], [1, 1, 0]]) >>> [np.bincount(m[i]) for i in range(m.shape[1])] [array([3]), array([1, 2]), array([1, 2])] >>> np.apply_along_axis(np.bincount, 1, m) Traceback (most recent call last): File "", line 1, in  np.apply_along_axis(np.bincount, 1, m) File "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py", line 117, in apply_along_axis outarr[tuple(i.tolist())] = res ValueError: could not broadcast input array from shape (2) into shape (1) 

no lo hare

Puedes usar el parámetro minlength y pasarlo usando un lambda o partial o algo así:

 >>> np.apply_along_axis(lambda x: np.bincount(x, minlength=2), axis=1, arr=m) array([[3, 0], [1, 2], [1, 2]])