sto cercando di contare un numero di ogni riga sono riportate in una np.array
, ad esempio:contare quante volte ogni riga è presente in numpy.array
import numpy as np
my_array = np.array([[1, 2, 0, 1, 1, 1],
[1, 2, 0, 1, 1, 1], # duplicate of row 0
[9, 7, 5, 3, 2, 1],
[1, 1, 1, 0, 0, 0],
[1, 2, 0, 1, 1, 1], # duplicate of row 0
[1, 1, 1, 1, 1, 0]])
fila [1, 2, 0, 1, 1, 1]
presenta 3 volte.
Una soluzione semplice ingenuo comporterebbe la conversione di tutte le mie righe da tuple, e applicando collections.Counter
, in questo modo:
from collections import Counter
def row_counter(my_array):
list_of_tups = [tuple(ele) for ele in my_array]
return Counter(list_of_tups)
che produce:
In [2]: row_counter(my_array)
Out[2]: Counter({(1, 2, 0, 1, 1, 1): 3, (1, 1, 1, 1, 1, 0): 1, (9, 7, 5, 3, 2, 1): 1, (1, 1, 1, 0, 0, 0): 1})
Tuttavia, io sono preoccupato per l'efficienza il mio approccio E forse c'è una libreria che fornisce un modo integrato per farlo. Ho taggato la domanda come pandas
perché penso che lo pandas
potrebbe avere lo strumento che sto cercando.
Mi piace questo problema! Potresti essere in grado di utilizzare 'np.lexsort' a tuo vantaggio, ma non sono sicuro che la raccolta dopo l'ordinamento possa essere eseguita abbastanza velocemente. – eickenberg