Pular para o conteúdo
Conteúdo do curso

Guia Prático: Funções Avançadas do NumPy

1. 📡 Broadcasting

Permite realizar operações entre arrays de formas diferentes sem precisar replicar dados.

import numpy as np

a = np.array([1, 2, 3])
b = 2
print(a + b)  # Resultado: [3 4 5]

# Com formas diferentes:
A = np.array([[1], [2], [3]])
B = np.array([10, 20, 30])
print(A + B)
# Resultado:
# [[11 21 31]
#  [12 22 32]
#  [13 23 33]]

Regras: Alinhamento de formas da direita para a esquerda e "expansão" de dimensões com tamanho 1.

2. 🧮 Agregações

Funções para resumir dados: soma, média, desvio padrão, etc.

data = np.array([[1, 2, 3], [4, 5, 6]])

print(data.sum())           # Soma total
print(data.sum(axis=0))     # Soma por colunas: [5 7 9]
print(data.mean(axis=1))    # Média por linhas: [2. 5.]
print(data.std())           # Desvio padrão

3. 🔀 Manipulação Avançada de Arrays

🔁 Reshape & Flatten

arr = np.arange(6).reshape(2, 3)
print(arr)

flat = arr.flatten()  # Copia 1D
r = arr.ravel()       # Visualização 1D (não copia)

🔄 Stack e Concatenate

a = np.array([[1, 2]])
b = np.array([[3, 4]])

print(np.concatenate([a, b], axis=0))  # Linhas
print(np.vstack([a, b]))               # Igual
print(np.hstack([a.T, b.T]))           # Colunas

🔁 Split e Tile

x = np.arange(8)
np.split(x, 4)         # Divide em partes iguais
np.tile(x, 2)          # Repete array

4. ⚙️ Funções Universais (ufuncs)

São funções vetorizadas que aplicam operações element-wise com alta performance.

a = np.array([1, 2, 3])
print(np.exp(a))       # exponencial
print(np.log(a))       # log natural
print(np.sqrt(a))      # raiz quadrada
print(np.add(a, 1))    # soma

Muitas ufuncs suportam out= (para evitar alocação extra) e where= (para aplicar condicionalmente).

5. 🚀 Performance e Otimização

Evite loops com operações vetorizadas

# Ineficiente:
res = []
for i in range(1000):
    res.append(i**2)

# Eficiente:
res = np.arange(1000) ** 2

🧩 Use tipos corretos e evite cópias desnecessárias

a = np.array([1, 2, 3], dtype=np.float32)  # Mais leve
b = a.view()     # Mesma memória

🔬 Benchmark com %timeit (no Jupyter)

%timeit np.arange(1e6) ** 2

📦 Use numexpr, numbа, ou Cython para aceleração extra

Avaliação
0 0

Por enquanto não há comentários.

para ser o primeiro a comentar.