Contar Zeros em NumPy Array

Vaibhav Vaibhav 20 novembro 2021
  1. Contagem de zeros em um array NumPy usando count_nonzero()
  2. Contar zeros em um array NumPy usando where()
Contar Zeros em NumPy Array

À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á zeros
  • axis - é 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 como True, 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.

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.