Assuming you mean the total number of nonzero elements (and not the total number of nonzero rows):
In [12]: a = np.random.randint(0, 3, size=(100,100)) In [13]: timeit len(a.nonzero()[0]) 1000 loops, best of 3: 306 us per loop In [14]: timeit (a != 0).sum() 10000 loops, best of 3: 46 us per loop
or even better:
In [22]: timeit np.count_nonzero(a) 10000 loops, best of 3: 39 us per loop
This last one, count_nonzero , seems to behave well when the array is also small, while the sum tag is not so much:
In [33]: a = np.random.randint(0, 3, size=(10,10)) In [34]: timeit len(a.nonzero()[0]) 100000 loops, best of 3: 6.18 us per loop In [35]: timeit (a != 0).sum() 100000 loops, best of 3: 13.5 us per loop In [36]: timeit np.count_nonzero(a) 1000000 loops, best of 3: 686 ns per loop
source share