NumPy para IA
Saber NumPy é fundamental para implementar modelos de inteligência artificial (IA) em Python. Em especial, algoritmos de machine learning desenvolvidos em Python costumam usar NumPy extensamente. Mas NumPy é uma biblioteca grande. Portanto, o objetivo deste post é apresentar uma pequena lista dos conceitos essenciais do NumPy para desenvolver e implementar modelos de IA. Ela não é uma lista completa ou definitiva, seu intuito é apenas servir como um guia.
Arrays NumPy
O objeto fundamental no NumPy é o ndarray (array n-dimensional), também referido em português como matriz NumPy. No entanto, é importante notar que arrays NumPy não se restringem apenas a matrizes. Arrays NumPy podem ser vetores, matrizes e tensores.
Arrays NumPy são usados para armazenar dados homogêneos em uma estrutura semelhante a uma grade.
import numpy as np
# um exemplo de array NumPy unidimensional (vetor)
a = np.array([1, 2, 3, 4, 5, 6])
print(a)
# resultado: [1 2 3 4 5 6]
# um exemplo de array NumPy bidimensional (matriz)
b = np.array([[1, 1, 1], [2, 2, 2]])
print(b)
# resultado:
# [[1 1 1]
# [2 2 2]]
# um exemplo de array NumPy multidimensional com mais de 2 dimensões (tensor)
c = np.array([[[1, 1, 1], [2, 2, 2]], [[2, 3, 4], [5, 5, 6]], [[7, 1, 0], [2, 3, 0]]]) # tensor com dimensão (3, 2, 3)
print(c)
# resultado
# [[[1 1 1]
# [2 2 2]]
# [[2 3 4]
# [5 5 6]]
# [[7 1 0]
# [2 3 0]]]
Criação de Arrays
Para usar NumPy, é fundamental aprender como criar diferentes tipos de arrays (1D, 2D, 3D) usando funções como np.array, np.zeros, np.ones, np.arange, np.linspace.
# Exemplos de criação de Arrays NumPy
# Array de zeros
arr = np.zeros([2, 3]) # cria um array 2D com 2 linhas e 3 colunas
print(arr)
# resultado:
# [[0. 0. 0.]
# [0. 0. 0.]]
# Array de valores aleatórios no intervalo [0.0, 1.0)
arr = np.random.random([3, 2]) # cria um array 2D com 3 linhas e 2 colunas
print(arr)
# resultado:
# [[0.72143211 0.91758018 0.58356666]
# [0.11679254 0.82994847 0.31913113]]
Atributos de Arrays
Arrays NumPy possuem vários atributos. Alguns atributos importantes incluem:
shape: retorna as dimensões do array.
meu_arr = np.ones([3, 4, 5])
print(meu_arr.shape) # retorna a forma do array
# resultado: (3, 4, 5)
dtype: retorna o tipo de dados dos elementos de um array.
# Atributos de arrays
# dtype
arr1 = np.random.random([5, 2])
print(arr1.dtype) # retorna tipo de dados do array
# resultado: float64
Indexação e fatiamento (slicing)
Saber acessar e manipular elementos em arrays usando indexação e fatiamento é fundamental. No NumPy, a indexação e o fatiamento são semelhantes às operações de mesmos nomes realizadas com listas do Python. Porém, com um array NumPy, elas são estendidas a várias dimensões.
# Indexação
meu_arr = np.array([1, 2, 3, 4, 5])
print(meu_arr[3]) # resultado: 4
# fatiamento
arr = np.random.random([2, 2, 3])
print(arr)
# array completo
# [[[0.48480261 0.88037989 0.7019778 ]
# [0.18887331 0.92411475 0.78802969]]
# [[0.62619082 0.08463268 0.16367563]
# [0.72238159 0.26408504 0.6143495 ]]]
print(arr[0,:,0]) # retorna apenas uma fatia do array
# resultado: [0.48480261 0.18887331]
Reformulação
Reformulação se refere a métodos usados para alterar a forma de um array como reshape, ravel, transpose e squeeze.
# Exemplo de reformulação com reshape
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1.shape) # verifica forma do array
# resultado: (5,)
arr2 = np.reshape(arr1, (arr1.shape[0], 1)) # cria um array com uma nova forma
print(arr2.shape) # verifica forma do array reformulado
# resultado: (5, 1)
Aritmética Básica
NumPy realiza todas as operações aritméticas elementares com arrays. Elas incluem operações como adição, subtração, multiplicação, divisão e módulo. Essas operações são rotineiras em algorimos de machine learning.
# Exemplo de aritmética básica
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([6, 7, 8, 9, 10])
print(np.add(arr1, arr2)) # adiciona 2 arrays
# resultado: [ 7 9 11 13 15]
Operações Matriciais
Quem já implementou modelos de redes neurais sabe que as multiplicações de arrays são frequentes. NumPy oferece métodos para realizar multiplicação de matrizes, produto escalar e outras operações de álgebra linear.
# Exemplo de operações de álgebra linear
# produto escalar: np.dot
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
ex_dot = np.dot(a, b)
print(ex_dot) # resultado: 32
# multiplicação de matrizes: np.matmul
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
ex_matmul = np.matmul(A, B)
print(ex_matmul)
# Resultado:
# [[19 22]
# [43 50]]
Funções para Cálculos Estatísticos
Além das funções mencionadas acima, é importante saber usar funções integradas para cálculos estatísticos (média, desvio padrão, etc.).
# Exemplo de função para cálculo estatístico
meu_arr = np.array([20, 33, 50, 11, 60])
print(np.mean(meu_arr)) # calcula calcula média
# resultados: 34.8
Broadcasting
Broadcasting é um conceito fundamental em NumPy. Ele possibilita realizar operações em arrays de diferentes formas. No exemplo abaixo, adicionamos uma matriz 2D e uma matriz 1D. Para isso funcionar, o NumPy usa o conceito de broadcasting: o ‘array_1d’ é transmitido para corresponder à forma de ‘array_2d’.
# Exemplo de broadcasting
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
array_1d = np.array([1, 2, 3])
print(array_2d + array_1d)
# resultado:
# [[2 4 6]
# [5 7 9]]
Assim, a operação envolvendo matrizes de diferentes dimensões é realizada sem problemas.
Vetorização
Por fim, é sempre importante mencionar o conceito de vetorização, tratado previamente aqui. A vetorização em NumPy refere-se ao processo de executar operações em matrizes inteiras de uma só vez, em vez de usar loops explícitos. Essa abordagem geralmente é muito mais rápida e eficiente, especialmente para grandes conjuntos de dados. Algoritmos de machine learning usam vetorização frequentemente. Consequentemente, é fundamental aprender como usá-la eficientemente.
Veja também:
Encontrou algum erro ou quer fazer uma sugestão? Por favor, entre em contato usando nosso formulário de contatos.