NumPy: Álgebra Linear

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

1. O que Você Aprenderá



2. História

Bob precisa resolver um sistema de 1000 equações lineares. Ele escreve um loop de eliminação de Gauss — 30 segundos e uma implementação com bugs. Alice usa np.linalg.solve(A, b) — 0,01 segundos, resultado exato. "Álgebra linear no NumPy não é apenas mais rápida — ela chama BLAS/LAPACK, as mesmas bibliotecas usadas pelo MATLAB e R. Testadas em combate por décadas."



3. Conceitos-Chave

(1) Multiplicação de Matrizes

PYTHON
import numpy as np

A = np.array([[1, 2],
              [3, 4]])
B = np.array([[5, 6],
              [7, 8]])

# Três formas equivalentes:
print(A @ B)            # [[19 22]
                        #  [43 50]]
print(np.dot(A, B))     # mesmo resultado
print(np.matmul(A, B))  # mesmo resultado
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.

(2) Inversa e Determinante

PYTHON
import numpy as np

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

det = np.linalg.det(A)      # -2.000
inv = np.linalg.inv(A)      # [[-2.   1. ]
                             #  [ 1.5 -0.5]]
print(A @ inv)              # [[1. 0.]
                             #  [0. 1.]]  (identidade)
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.

(3) Solução de Sistemas Lineares

PYTHON
# Resolver Ax = b
A = np.array([[3, 1],
              [1, 2]])
b = np.array([9, 8])

x = np.linalg.solve(A, b)
print(x)  # [2. 3.]
print(A @ x)  # [9. 8.]  — verificação
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.

▶ Exemplo: Multiplicação de matrizes (Dificuldade ⭐)

PYTHON
import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6]])
B = np.array([[7, 8],
              [9, 10],
              [11, 12]])

# Multiplicação de matrizes: (2x3) @ (3x2) = (2x2)
C = A @ B
print("A @ B:\n", C)

# Produto escalar de vetores
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
print("dot(x, y):", np.dot(x, y))

Output:

TEXT 📖 Somente leitura
A @ B:
 [[ 58  64]
 [139 154]]
dot(x, y): 32

▶ Exemplo: Resolvendo sistemas lineares (Dificuldade ⭐⭐)

PYTHON
import numpy as np

# Resolver: 3x + y = 9, x + 2y = 8
A = np.array([[3, 1],
              [1, 2]])
b = np.array([9, 8])

x = np.linalg.solve(A, b)
print("Solução:", x)

# Verificação
print("A @ x =", A @ x)
print("b     =", b)

Output:

TEXT 📖 Somente leitura
Solução: [2. 3.]
A @ x = [9. 8.]
b     = [9. 8.]

▶ Exemplo: Autovalores e autovetores (Dificuldade ⭐⭐)

PYTHON
import numpy as np

A = np.array([[4, -2],
              [1,  1]])

eigenvalues, eigenvectors = np.linalg.eig(A)
print("Autovalores:", eigenvalues)

# Verificação: A @ v = λ * v
v = eigenvectors[:, 0]
lam = eigenvalues[0]
lhs = A @ v
rhs = lam * v
print("A @ v:", lhs)
print("λ * v:", rhs)
print("Corresponde:", np.allclose(lhs, rhs))

Output:

TEXT 📖 Somente leitura
Autovalores: [3. 2.]
A @ v: [0.89442719 0.4472136 ]
λ * v: [0.89442719 0.4472136 ]
Corresponde: True

P: Qual é a diferença entre @, np.dot e np.matmul? R: Para arrays 2D, são idênticos. Para dimensões superiores, @ e np.matmul usam broadcasting (multiplicação empilhada de matrizes), enquanto np.dot usa soma-produto sobre o último eixo de cada um.

P: Quando devo usar solve vs inv? R: Sempre use solve — é mais rápido e numericamente mais estável. Computar inv(A) @ b é mais lento e menos preciso que solve(A, b).

P: E se A for singular? R: np.linalg.solve lança LinAlgError: Singular matrix. Use np.linalg.lstsq para soluções de mínimos quadrados em sistemas sub/sobre-determinados.


❓ Perguntas Frequentes

P: O que é a coisa mais importante a lembrar? R: As operações do NumPy são vetorizadas — evite loops Python para melhor desempenho.

P: Onde posso aprender mais? R: Consulte a documentação oficial do NumPy em numpy.org para referências detalhadas e tópicos avançados.

P: Isso funciona com o NumPy 2.x? R: Sim — todos os exemplos são compatíveis com o NumPy 2.x. Algumas APIs mais antigas (como np.random.seed) ainda são suportadas, mas as alternativas modernas são recomendadas.

📖 Resumo



📝 Exercícios

  1. Básico (Dificuldade ⭐): Crie duas matrizes 3x3 de inteiros aleatórios. Compute o produto, determinante e inversa. Verifique que A @ inv(A) ≈ identidade.

  2. Intermediário (Dificuldade ⭐⭐): Resolva o sistema: 3x + y = 9, x + 2y = 8 usando np.linalg.solve. Verifique sua solução.

  3. Desafio (Dificuldade ⭐⭐⭐): Gere uma matriz aleatória 5x5, compute seus autovalores e autovetores. Verifique que A @ v = λ * v para cada par autovalor-autovetor.

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%