Contare gli zeri in NumPy Array

Vaibhav Vaibhav 22 giugno 2021
  1. Contare gli zeri in un array NumPy utilizzando count_nonzero()
  2. Contare gli zeri in un array NumPy utilizzando where()
Contare gli zeri in NumPy Array

A volte, dobbiamo contare gli elementi all’interno di un array. Durante il conteggio, a volte associamo una condizione e contiamo gli elementi che soddisfano tale condizione. Può essere una condizione maggiore di, una condizione minore di, una condizione uguale, ecc.

In questo articolo impareremo come contare gli zeri in un array NumPy in modo efficiente.

NumPy viene fornito con tutti i tipi di metodi che possiamo applicare agli array e alle matrici NumPy multidimensionali. Ha anche alcune funzioni che possiamo usare per contare gli zeri.

Questo articolo discuterà due di questi metodi, count_nonzero() e where().

Contare gli zeri in un array NumPy utilizzando count_nonzero()

Come suggerisce il nome, questo metodo conta gli elementi diversi da zero. Useremo questa funzione per contare gli zeri.

count_nonzero() restituisce un valore intero o un array di valori interi.

La sintassi di count_nonzero() è di seguito.

count_nonzero(a, axis, keepdims)

Ha i seguenti parametri.

  • a - L’array in cui la funzione conterà gli zeri
  • axis - È un parametro opzionale, e si riferisce all’asse o tupla di assi lungo i quali verranno conteggiati gli elementi diversi da zero. Il valore predefinito di questo parametro è None, il che significa che il conteggio verrà eseguito su un array appiattito.
  • keepdims - Questo è un parametro booleano opzionale. Per impostazione predefinita, è False. Se impostato a True, gli assi contati vengono lasciati nel risultato come dimensioni con dimensione 1.

Ora contiamo gli zeri usando questo metodo. Fare riferimento al seguente frammento di codice per il primo modo.

import numpy as np

myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(f"Number of Non-Zeroes in Array --> {np.count_nonzero(myArray)}")
print(f"Number of Non-Zeroes in Matrix --> {np.count_nonzero(myMatrix)}")
print(f"Number of Zeroes in Array --> {myArray.size - np.count_nonzero(myArray)}")
print(f"Number of Zeroes in Matrix --> {myMatrix.size - np.count_nonzero(myMatrix)}")

Produzione:

[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
 [0 1 0 1]
 [1 0 1 0]
 [1 1 0 0]]
Number of Non-Zeroes in Array --> 6
Number of Non-Zeroes in Matrix --> 8
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8

Nello snippet di codice sopra, tutto ciò che abbiamo fatto è contare il numero di elementi diversi da zero e quindi sottrarre il numero di elementi diversi da zero dalla dimensione totale dell’array o della matrice.

Questa soluzione potrebbe non essere il miglior utilizzo di questa funzione, ma la seguente lo è.

import numpy as np

myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(myArray == 0)
print(myMatrix == 0)
print(f"Number of Zeroes in Array --> {np.count_nonzero(myArray == 0)}")
print(f"Number of Zeroes in Matrix --> {np.count_nonzero(myMatrix == 0)}")

Produzione:

[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
 [0 1 0 1]
 [1 0 1 0]
 [1 1 0 0]]
[False False  True False False  True False False  True]
[[ True  True False False]
 [ True False  True False]
 [False  True False  True]
 [False False  True  True]]
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8

Il nucleo di questa soluzione è il principio che qualsiasi cosa in informatica che sia False può essere rappresentato come 0 e True può essere rappresentato come un valore diverso da zero.

L’istruzione myArray == 0 restituisce un array in cui tutti gli elementi che soddisfano la proprietà sono True e quelli che non lo sono sono False. E la condizione stessa controlla se un elemento è zero o meno. Quindi, tutti gli elementi zero si trasformeranno in True e ora dobbiamo contarli. E per questo, usiamo il metodo count_nonzero().

Qui è il link alla documentazione ufficiale della funzione.

Contare gli zeri in un array NumPy utilizzando where()

La funzione where() filtra gli elementi da un array in base a una condizione specificata e restituisce l’array filtrato. Restituisce gli indici degli elementi filtrati. Usando questa funzione, costruiremo un array che ha solo zeri e la lunghezza di questo nuovo array mi darà il conteggio degli zeri.

Ora vediamo la soluzione.

import numpy as np

myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(myArray[np.where(myArray == 0)])
print(myMatrix[np.where(myMatrix == 0)])
print(f"Number of Zeroes in Array --> {myArray[np.where(myArray == 0)].size}")
print(f"Number of Zeroes in Matrix --> {myMatrix[np.where(myMatrix == 0)].size}")

Produzione:

[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
 [0 1 0 1]
 [1 0 1 0]
 [1 1 0 0]]
[0 0 0]
[0 0 0 0 0 0 0 0]
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8

Nello snippet di codice sopra, abbiamo filtrato tutti gli elementi che erano zero. La funzione where() ha restituito gli indici di quegli elementi. Abbiamo ulteriormente utilizzato questi indici per ottenere gli elementi originali. Ovviamente saranno tutti pari a zero. Infine, abbiamo contato il numero di quegli zeri e stampato i conteggi.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.