NumPy Zeros: Criar arrays preenchidos com zeros usando np.zeros()
Updated on
Inicializar arrays com zeros e uma das operacoes mais comuns na computacao numerica. Voce precisa de arrays pre-alocados para acumular resultados em loops, matrizes preenchidas com zeros para processamento de imagens, tensores de marcacao para pesos de redes neurais ou grades vazias para estado de simulacao. Usar listas Python preenchidas com zeros e lento e nao possui as operacoes matematicas que o NumPy fornece.
np.zeros() cria arrays de qualquer forma preenchidos com zeros, usando o tipo de dados que voce especificar. E rapido, eficiente em memoria e a forma padrao de inicializar arrays no NumPy.
Uso basico
Array 1D
import numpy as np
# Criar um array 1D de 5 zeros
a = np.zeros(5)
print(a) # [0. 0. 0. 0. 0.]
print(a.dtype) # float64 (default)
print(a.shape) # (5,)Array 2D (Matriz)
import numpy as np
# 3 linhas, 4 colunas
matrix = np.zeros((3, 4))
print(matrix)
# [[0. 0. 0. 0.]
# [0. 0. 0. 0.]
# [0. 0. 0. 0.]]
print(matrix.shape) # (3, 4)Array 3D
import numpy as np
# 2 camadas, 3 linhas, 4 colunas
tensor = np.zeros((2, 3, 4))
print(tensor.shape) # (2, 3, 4)
print(tensor.size) # 24 elements totalEspecificando tipos de dados
O dtype padrao e float64. Use o parametro dtype para alterar:
import numpy as np
# Zeros inteiros
int_zeros = np.zeros(5, dtype=int)
print(int_zeros) # [0 0 0 0 0]
print(int_zeros.dtype) # int64
# Zeros booleanos (False)
bool_zeros = np.zeros(5, dtype=bool)
print(bool_zeros) # [False False False False False]
# Zeros complexos
complex_zeros = np.zeros(3, dtype=complex)
print(complex_zeros) # [0.+0.j 0.+0.j 0.+0.j]
# Float de 32 bits (economiza memoria)
small_zeros = np.zeros((1000, 1000), dtype=np.float32)
print(f"Memory: {small_zeros.nbytes / 1024 / 1024:.1f} MB") # ~3.8 MB vs 7.6 MB for float64Tipos de dados comuns
| dtype | Descricao | Zeros parecem com | Memoria por elemento |
|---|---|---|---|
float64 | Float de 64 bits (padrao) | 0. | 8 bytes |
float32 | Float de 32 bits | 0. | 4 bytes |
int64 | Inteiro de 64 bits | 0 | 8 bytes |
int32 | Inteiro de 32 bits | 0 | 4 bytes |
bool | Booleano | False | 1 byte |
complex128 | Complexo de 128 bits | 0.+0.j | 16 bytes |
np.zeros_like() -- Corresponder a um array existente
Crie um array de zeros com a mesma forma e dtype de outro array:
import numpy as np
original = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32)
# Mesma forma e dtype
zeros_copy = np.zeros_like(original)
print(zeros_copy)
# [[0. 0. 0.]
# [0. 0. 0.]]
print(zeros_copy.dtype) # float32
print(zeros_copy.shape) # (2, 3)
# Substituir dtype
int_copy = np.zeros_like(original, dtype=int)
print(int_copy.dtype) # int64Funcoes de inicializacao relacionadas
| Funcao | Cria | Caso de uso |
|---|---|---|
np.zeros(shape) | Todos zeros | Inicializacao padrao |
np.ones(shape) | Todos uns | Identidade multiplicativa, mascaras |
np.full(shape, value) | Mesmo valor | Valor de preenchimento personalizado |
np.empty(shape) | Nao inicializado | Performance (quando preenchido imediatamente) |
np.eye(n) | Matriz identidade | Algebra linear |
np.zeros_like(arr) | Zeros correspondendo a outro array | Arrays de resultado correspondendo a entrada |
import numpy as np
# Uns
print(np.ones((2, 3)))
# [[1. 1. 1.]
# [1. 1. 1.]]
# Full (valor personalizado)
print(np.full((2, 3), 7))
# [[7 7 7]
# [7 7 7]]
# Empty (nao inicializado -- mais rapido mas contem lixo)
empty = np.empty((2, 3)) # Contents unpredictable
# Matriz identidade
print(np.eye(3))
# [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]Casos de uso praticos
Pre-alocar arrays de resultados
import numpy as np
# Pre-alocar para performance (evita concatenacao repetida)
n_iterations = 1000
results = np.zeros(n_iterations)
for i in range(n_iterations):
results[i] = np.random.randn() ** 2
print(f"Mean: {results.mean():.4f}")
print(f"Std: {results.std():.4f}")Matriz de confusao
import numpy as np
def confusion_matrix(y_true, y_pred, n_classes):
"""Build a confusion matrix from predictions."""
cm = np.zeros((n_classes, n_classes), dtype=int)
for true, pred in zip(y_true, y_pred):
cm[true][pred] += 1
return cm
y_true = [0, 1, 2, 0, 1, 2, 0, 0, 1, 2]
y_pred = [0, 1, 1, 0, 2, 2, 0, 1, 1, 0]
cm = confusion_matrix(y_true, y_pred, 3)
print(cm)
# [[3 1 0]
# [0 2 1]
# [1 0 2]]Preenchimento com zeros para processamento de sinais
import numpy as np
signal = np.array([1, 2, 3, 4, 5])
# Preencher com zeros ate comprimento 16 (potencia de 2 para FFT)
padded = np.zeros(16)
padded[:len(signal)] = signal
print(padded)
# [1. 2. 3. 4. 5. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
# Usando np.pad (mais flexivel)
padded2 = np.pad(signal, (0, 11), mode='constant', constant_values=0)
print(padded2)Processamento de imagens -- Preenchimento com zeros
import numpy as np
# Imagem original 3x3
image = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# Adicionar preenchimento de zeros de 1 pixel
padded = np.zeros((5, 5), dtype=image.dtype)
padded[1:-1, 1:-1] = image
print(padded)
# [[0 0 0 0 0]
# [0 1 2 3 0]
# [0 4 5 6 0]
# [0 7 8 9 0]
# [0 0 0 0 0]]Padrao de acumulacao
import numpy as np
# Acumular contagens em um histograma
data = np.random.randint(0, 10, size=1000)
bins = np.zeros(10, dtype=int)
for value in data:
bins[value] += 1
print("Histogram:")
for i, count in enumerate(bins):
bar = '#' * (count // 5)
print(f" {i}: {bar} ({count})")Explorar arrays de zeros no Jupyter
Ao construir algoritmos numericos que usam arrays inicializados com zeros, RunCell (opens in a new tab) fornece um ambiente Jupyter com IA onde voce pode inspecionar formas de arrays, dtypes e uso de memoria interativamente enquanto desenvolve.
FAQ
Como criar um array de zeros no NumPy?
Use np.zeros(shape) onde shape e um inteiro para 1D ou uma tupla para multidimensional. Por exemplo, np.zeros(5) cria [0., 0., 0., 0., 0.] e np.zeros((3, 4)) cria uma matriz 3x4 de zeros. O dtype padrao e float64.
Qual e a diferenca entre np.zeros e np.empty?
np.zeros() inicializa cada elemento com zero. np.empty() aloca memoria sem inicializacao, entao contem o que estava anteriormente naquele local de memoria. np.empty() e ligeiramente mais rapido mas so seguro quando voce preenchera cada elemento imediatamente antes de ler.
Como criar zeros inteiros em vez de zeros de ponto flutuante?
Passe dtype=int para np.zeros(): np.zeros(5, dtype=int) cria [0, 0, 0, 0, 0] com dtype int64. Voce tambem pode usar tipos especificos como np.int32 ou np.int8 para controle de memoria.
Como criar um array de zeros com a mesma forma de outro array?
Use np.zeros_like(existing_array). Isso copia a forma e o dtype do array de entrada. Voce pode substituir o dtype com np.zeros_like(arr, dtype=float).
np.zeros() e mais rapido que np.full(shape, 0)?
Sim, np.zeros() e ligeiramente mais rapido porque usa alocacao de memoria otimizada a nivel do sistema operacional (calloc) que fornece memoria zerada diretamente, enquanto np.full() deve alocar e depois preencher. Para a maioria dos propositos praticos, a diferenca e insignificante.
Conclusao
np.zeros() e a forma padrao de criar arrays preenchidos com zeros no NumPy. Use-o para pre-alocacao, preenchimento, padroes de acumulacao e inicializacao. Escolha np.zeros_like() quando precisar corresponder a forma de um array existente. Especifique dtype para controlar o uso de memoria -- float32 usa metade da memoria de float64. Para inicializacao diferente de zero, use np.ones(), np.full() ou np.empty() conforme suas necessidades.