NumPy: Operações de Agregação
Última atualização: 2026-08-26
1. O que Você Aprenderá
- ❶ Agregações básicas: sum, mean, std, var, min, max
- ❷ Agregação por eixo: redução ao longo de dimensões específicas
- ❸ Funções NaN-safe: nanmean, nansum, nanstd
- ❹ Operações cumulativas: cumsum, cumprod
- ❺ Agregação vs built-ins do Python
2. História
Alice precisa calcular a média, o máximo e o desvio padrão de 10 milhões de leituras de sensores. Em Python, ela escreveria três loops — 15 segundos. No NumPy: data.mean(), data.max(), data.std() — 0,05 segundos no total. "Agregação no NumPy não é apenas mais rápida — é um paradigma diferente. Uma chamada de função, execução em nível C, sem loop Python."
3. Conceitos-Chave
(1) Agregações Básicas
import numpy as np
a = np.array([3, 7, 1, 9, 5])
print(a.sum()) # 25
print(a.mean()) # 5.0
print(a.std()) # 2.828
print(a.var()) # 8.0
print(a.min()) # 1
print(a.max()) # 9
print(a.argmin()) # 2 (índice do mínimo)
print(a.argmax()) # 3 (índice do máximo)
print(a.ptp()) # 8 (peak to peak: máximo - mínimo)
> **Output:** Execute o NumPy 2.x em seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem o NumPy pré-instalado — instale-o localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
(2) Agregação por Eixo
import numpy as np
a = np.arange(12).reshape(3, 4)
print(a)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
# Soma ao longo do eixo 0 (por coluna)
print(a.sum(axis=0)) # [12 15 18 21]
# Soma ao longo do eixo 1 (por linha)
print(a.sum(axis=1)) # [6 22 38]
# Soma global
print(a.sum()) # 66
> **Output:** Execute o NumPy 2.x em seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem o NumPy pré-instalado — instale-o localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
(3) Funções NaN-Safe
Dados reais frequentemente contêm valores NaN. Agregações padrão propagam NaN:
import numpy as np
a = np.array([1.0, 2.0, np.nan, 4.0])
print(a.mean()) # nan
print(np.nanmean(a)) # 2.333
print(np.nansum(a)) # 7.0
print(np.nanstd(a)) # 1.247
print(np.nanmin(a)) # 1.0
print(np.nanmax(a)) # 4.0
> **Output:** Execute o NumPy 2.x em seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem o NumPy pré-instalado — instale-o localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
(4) Operações Cumulativas
import numpy as np
a = np.array([1, 2, 3, 4, 5])
print(np.cumsum(a)) # [1 3 6 10 15]
print(np.cumprod(a)) # [1 2 6 24 120]
▶ Exemplo
> **Output:** Execute o NumPy 2.x em seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem o NumPy pré-instalado — instale-o localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
: Agregação por eixo em 2D (Dificuldade ⭐⭐)
import numpy as np
a = np.arange(12).reshape(3, 4)
print("axis=0 (por coluna):")
print(f" sum: {a.sum(axis=0)}")
print(f" mean: {a.mean(axis=0)}")
print(f" max: {a.max(axis=0)}")
print("axis=1 (por linha):")
print(f" sum: {a.sum(axis=1)}")
print(f" mean: {a.mean(axis=1)}")
print(f" max: {a.max(axis=1)}")
▶ Exemplo: Agregação NaN-safe (Dificuldade ⭐⭐)
import numpy as np
data = np.array([1.0, 2.0, np.nan, 4.0, np.nan, 6.0])
print("Standard mean:", data.mean())
print("nanmean:", np.nanmean(data))
print("nansum:", np.nansum(data))
print("nanstd:", np.nanstd(data))
print("nanmin:", np.nanmin(data))
print("nanmax:", np.nanmax(data))
# Contar valores não-NaN
print("Valid count:", np.sum(~np.isnan(data)))
Output:
TEXT 📖 Somente leituraStandard mean: nan nanmean: 3.25 nansum: 13.0 nanstd: 1.9202864369672785 nanmin: 1.0 nanmax: 6.0 Valid count: 4
▶ Exemplo: Operações cumulativas (Dificuldade ⭐)
import numpy as np
# Total acumulado
sales = np.array([10, 15, 7, 20, 13])
cumulative = np.cumsum(sales)
print("Daily sales:", sales)
print("Cumulative:", cumulative)
# Produto cumulativo
factors = np.array([1.1, 1.05, 0.98, 1.02])
growth = np.cumprod(factors)
print("Growth factors:", growth)
# Soma cumulativa 2D
a = np.arange(12).reshape(3, 4)
print("Row-wise cumsum:\n", np.cumsum(a, axis=1))
Output:
TEXT 📖 Somente leituraDaily sales: [10 15 7 20 13] Cumulative: [10 25 32 52 65] Growth factors: [1.1 1.155 1.1319 1.154538] Row-wise cumsum: [[ 0 1 3 6] [ 4 9 15 22] [ 8 17 27 38]]
❓ Perguntas Frequentes
P: Qual é a diferença entre a.sum() e np.sum(a)? R: Nenhuma diferença — são o mesmo método.
a.sum()é um método no objeto ndarray;np.sum(a)é a forma de função. Use o que lê melhor no contexto.
P: Como lidar com valores NaN na agregação? R: Use
np.nanmean(),np.nansum(),np.nanstd()etc. Estas funções ignoram valores NaN automaticamente. As funções padrãomean(),sum()propagam NaN.
P: O que é keepdims? R:
keepdims=Truepreserva a dimensão reduzida como tamanho 1, facilitando o broadcasting. Por exemplo,a.sum(axis=1, keepdims=True)retorna shape (3, 1) em vez de (3,).
📖 Resumo
- Agregações básicas: sum, mean, std, var, min, max, argmin, argmax, ptp
- O parâmetro axis controla qual dimensão reduzir;
keepdimspreserva dimensões - Funções NaN-safe: nanmean, nansum, nanstd, nanmin, nanmax
- Cumulativas: cumsum, cumprod para totais e produtos acumulados
📝 Exercícios
-
Básico (Dificuldade ⭐): Crie um array 4x4 de inteiros aleatórios 0-100. Compute a soma, média, mínimo, máximo e desvio padrão de todo o array. Depois compute as mesmas estatísticas ao longo de cada eixo.
-
Intermediário (Dificuldade ⭐⭐): Crie um array com valores NaN. Compute a média com e sem funções NaN-safe. Explique a diferença.
-
Desafio (Dificuldade ⭐⭐⭐): Gere um array 10.000x5 de dados aleatórios. Compute o z-score (padronize) para cada coluna usando média e desvio padrão por eixo. Verifique que cada coluna tem média ≈ 0 e desvio padrão ≈ 1.