NumPy é uma biblioteca fundamental para computação numérica em Python, oferecendo ferramentas poderosas para manipulação eficiente de arrays. Este tutorial aborda dois conceitos fundamentais: operações aritméticas e broadcasting, essenciais para escrever código numérico conciso e performático.
Sumário
1. Operações Aritméticas
NumPy estende perfeitamente os operadores aritméticos do Python (+, -, *, /, //, %, **) para operar diretamente em arrays NumPy. Essas operações são elemento a elemento, significando que elas se aplicam a elementos correspondentes nos arrays. Vamos ilustrar com exemplos:
import numpy as np
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([5, 6, 7, 8])
print("Adição:", arr1 + arr2) # Saída: [ 6 8 10 12]
print("Subtração:", arr1 - arr2) # Saída: [-4 -4 -4 -4]
print("Multiplicação:", arr1 * arr2) # Saída: [ 5 12 21 32]
print("Divisão:", arr1 / arr2) # Saída: [0.2 0.33333333 0.42857143 0.5 ]
print("Divisão Inteira:", arr1 // arr2) # Saída: [0 0 0 0]
print("Módulo:", arr1 % arr2) # Saída: [1 2 3 4]
print("Exponenciação:", arr1 ** arr2) # Saída: [ 1 64 2187 65536]
Esta operação elemento a elemento se estende sem esforço para arrays multidimensionais.
2. Broadcasting
Broadcasting é um recurso poderoso do NumPy que permite operações entre arrays de formatos diferentes, sob condições específicas. Ele elimina a necessidade de loops explícitos, melhorando significativamente o desempenho. As regras principais do broadcasting são:
- Regra 1: Se os arrays tiverem dimensões desiguais, o formato do array menor terá 1s adicionados à esquerda até que corresponda à dimensionalidade do array maior.
- Regra 2: Se um array tiver uma dimensão de tamanho 1 e o outro array tiver uma dimensão maior que 1, a dimensão de tamanho 1 será esticada para corresponder à dimensão maior.
- Regra 3: Se os arrays tiverem dimensões diferentes e nenhum tiver tamanho 1, um
ValueError
será levantado.
Vamos demonstrar o broadcasting:
import numpy as np
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([10, 20, 30])
result = arr1 + arr2 # Broadcasting em ação
print(result)
# Saída:
# [[11 22 33]
# [14 25 36]]
Aqui, arr2
(formato (3,)) é transmitido para corresponder ao formato de arr1
(2, 3). Cada linha de arr1
é adicionada a arr2
, evitando loops explícitos. Dominar o broadcasting é crucial para escrever código NumPy eficiente e legível. Sempre considere cuidadosamente os formatos dos arrays para evitar resultados inesperados ou erros.