Tengo una matriz Numpy y una lista de índices cuyos valores me gustaría incrementar en uno. Esta lista puede contener índices repetidos, y me gustaría que el incremento se escale con el número de repeticiones de cada índice. Sin repeticiones, el comando es simple:Incrementar matriz numerada con índices repetidos
a=np.zeros(6).astype('int')
b=[3,2,5]
a[b]+=1
Con repeticiones, se me ha ocurrido con el método siguiente.
b=[3,2,5,2] # indices to increment by one each replicate
bbins=np.bincount(b)
b.sort() # sort b because bincount is sorted
incr=bbins[np.nonzero(bbins)] # create increment array
bu=np.unique(b) # sorted, unique indices (len(bu)=len(incr))
a[bu]+=incr
¿Es esta la mejor manera? ¿Existe algún riesgo al suponer que las operaciones np.bincount
y np.unique
darían como resultado el mismo orden ordenado? ¿Me estoy perdiendo alguna operación simple de Numpy para resolver esto?
Tenga en cuenta que numpy.zeros (6). astype ('int') está mejor escrito como numpy.zeros (6, int). – EOL