¿Cómo cuento la aparición de un determinado elemento en un ndarray?

Resuelto mflowww asked hace 9 años • 32 respuestas

¿ Cómo cuento el número de 0sys 1en la siguiente matriz?

y = np.array([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1])

y.count(0)da:

numpy.ndarrayel objeto no tiene atributocount

mflowww avatar Feb 23 '15 05:02 mflowww
Aceptado

Usando numpy.unique:

import numpy
a = numpy.array([0, 3, 0, 1, 0, 1, 2, 1, 0, 0, 0, 0, 1, 3, 4])
unique, counts = numpy.unique(a, return_counts=True)

>>> dict(zip(unique, counts))
{0: 7, 1: 4, 2: 1, 3: 2, 4: 1}

Método no numpy que utiliza collections.Counter;

import collections, numpy
a = numpy.array([0, 3, 0, 1, 0, 1, 2, 1, 0, 0, 0, 0, 1, 3, 4])
counter = collections.Counter(a)

>>> counter
Counter({0: 7, 1: 4, 3: 2, 2: 1, 4: 1})
Ozgur Vatansever avatar Feb 22 '2015 22:02 Ozgur Vatansever

¿Qué hay de usar numpy.count_nonzeroalgo como

>>> import numpy as np
>>> y = np.array([1, 2, 2, 2, 2, 0, 2, 3, 3, 3, 0, 0, 2, 2, 0])

>>> np.count_nonzero(y == 1)
1
>>> np.count_nonzero(y == 2)
7
>>> np.count_nonzero(y == 3)
3
Aziz Alto avatar Feb 22 '2016 09:02 Aziz Alto

Personalmente, elegiría: (y == 0).sum()y(y == 1).sum()

P.ej

import numpy as np
y = np.array([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1])
num_zeros = (y == 0).sum()
num_ones = (y == 1).sum()
Gus Hecht avatar May 05 '2016 20:05 Gus Hecht