NumPy: Operações de Agregação

Última atualização: 2026-08-26

1. O que Você Aprenderá



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

PYTHON
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)
TEXT 📖 Somente leitura
> **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.
⚠️ Nota: O código abaixo precisa ser executado em um ambiente Python local.

(2) Agregação por Eixo

PYTHON
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
TEXT 📖 Somente leitura
> **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.
⚠️ Nota: O código abaixo precisa ser executado em um ambiente Python local.

(3) Funções NaN-Safe

Dados reais frequentemente contêm valores NaN. Agregações padrão propagam NaN:

PYTHON
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
TEXT 📖 Somente leitura
> **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.
⚠️ Nota: O código abaixo precisa ser executado em um ambiente Python local.

(4) Operações Cumulativas

PYTHON
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

TEXT 📖 Somente leitura
> **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 ⭐⭐)

PYTHON
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 ⭐⭐)

PYTHON
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 leitura
Standard 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 ⭐)

PYTHON
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 leitura
Daily 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ão mean(), sum() propagam NaN.

P: O que é keepdims? R: keepdims=True preserva 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



📝 Exercícios

  1. 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.

  2. Intermediário (Dificuldade ⭐⭐): Crie um array com valores NaN. Compute a média com e sem funções NaN-safe. Explique a diferença.

  3. 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.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%