Contar Zeros em NumPy Array
-
Contagem de zeros em um array NumPy usando
count_nonzero()
-
Contar zeros em um array NumPy usando
where()
Às vezes, temos que contar os elementos dentro de um array. Ao contar, às vezes associamos uma condição e contamos os elementos que satisfazem essa condição. Pode ser uma condição maior que, menor que, uma condição igual, etc.
Neste artigo, aprenderemos como contar zeros em um array NumPy de forma eficiente.
NumPy vem com todos os tipos de métodos que podemos aplicar a matrizes e matrizes NumPy multidimensionais. Ele também tem algumas funções que podemos usar para contar zeros.
Este artigo discutirá dois desses métodos, count_nonzero()
e where()
.
Contagem de zeros em um array NumPy usando count_nonzero()
Como o nome sugere, esse método conta os elementos diferentes de zero. Usaremos esta função para contar zeros.
count_nonzero()
retorna um valor inteiro ou um array de valores inteiros.
A sintaxe de count_nonzero()
está abaixo.
count_nonzero(a, axis, keepdims)
Possui os seguintes parâmetros.
a
- A matriz na qual a função contará zerosaxis
- é um parâmetro opcional, e se refere ao eixo ou tupla de eixos ao longo do qual os elementos diferentes de zero serão contados. O valor padrão deste parâmetro éNone
, o que significa que a contagem será feita em um array achatada.keepdims
- Este é um parâmetro booleano opcional. Por padrão, éFalse
. Se definido comoTrue
, os eixos contados são deixados no resultado como dimensões com tamanho 1.
Agora, vamos contar zeros usando este método. Consulte o seguinte trecho de código para a primeira maneira.
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)}")
Resultado:
[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
No trecho de código acima, tudo o que fizemos foi contar o número de elementos diferentes de zero e, em seguida, subtrair o número de elementos diferentes de zero do tamanho total do array ou matriz.
Esta solução pode não ser o melhor uso desta função, mas o seguinte é.
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)}")
Resultado:
[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
O núcleo desta solução é o princípio de que qualquer coisa na ciência da computação que seja False
pode ser representada como 0
e True
pode ser representada como um valor diferente de zero.
A instrução myArray == 0
retorna um array em que todos os elementos que satisfazem a propriedade são True
e aqueles que não são False
. E a própria condição verifica se um elemento é zero ou não. Então, todos os elementos zero se transformarão em True
e agora, temos que contá-los. E para isso, usamos o método count_nonzero()
.
Aqui está o link para a documentação oficial da função.
Contar zeros em um array NumPy usando where()
A função where()
filtra os elementos de um array com base em uma condição especificada e retorna a matriz filtrada. Ele retorna os índices dos elementos filtrados. Usando essa função, construiremos um array que tem apenas zeros, e o comprimento desse novo array me dará a contagem de zeros.
Agora, vamos ver a solução.
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}")
Resultado:
[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
No trecho de código acima, filtramos todos os elementos que eram zero. A função where()
retornou os índices desses elementos. Além disso, usamos esses índices para obter os elementos originais. Obviamente, todos eles serão zero. Por último, contamos o número desses zeros e imprimimos as contagens.