Vetorização com NumPy
Vetorização é o centro da maioria dos algoritmos de IA. Eficiente e capaz de lidar com grandes conjuntos de dados, ela é presença garantida em praticamente todos os aspectos do desenvolvimento e uso de modelos e algoritmos inteligentes.
O que são operações condicionais?
Operações condicionais comuns
Alguns tipos comuns de operações condicionais incluem:
Igualdades (a == b) e desigualdades (a != b): compara duas matrizes para verificar quais de seus elementos são iguais ou diferentes. Veja um exemplo, o resultado retorna uma matriz booleana:
import numpy as np
a = np.array([1, 2, 3, 4, 5])
b = np.array([1, 0, 3, 0, 5])
print(a == b) # compara os itens de a e b para verificar igualdades
# resultados: [ True False True False True]
a = np.array([1, 2, 3, 4, 5])
b = np.array([1, 0, 3, 0, 5])
print(a > b) # compara os itens de a e b para verificar que itens de a são maiores do que seus correspondentes em b
# resultados: [False True False True False]
Vetorização de operações condicionais com NumPy
O NumPy fornece várias maneiras de vetorizar operações condicionais. A seguir, exploraremos as principais.
Máscaras booleanas
Uma maneira de vetorizar operações condicionais é usar máscaras booleanas. Uma máscara booleana é uma matriz em que cada elemento é ‘True’ ou ‘False’, dependendo da condição. Veja um exemplo:
import numpy as np
a = np.array([1, 2, 3, 4, 5])
# Cria uma máscara booleana
mask = a >= 5 # verifica itens de a maiores ou iguais a 5
print(mask)
# resultados: [False False False False True]
np.where()
Outra maneira de vetorizar operações condicionais é usar a função np.where(). Ela pode ser utilizada para retornar os índices dos elementos onde uma condição é verdadeira como ilustrado abaixo:
arr = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(np.where(arr<5)) # retorna os índices dos itens de arr menores do que 5
# resultados: (array([0, 0, 0, 1]), array([0, 1, 2, 0]))
Neste exemplo, o método np.where() foi usado para retornar os índices dos elementos da matriz arr menores do que 5. O np.where() também pode ser usado para testar uma condição e já aplicar uma operação com base no resultado obtido, como ilustrado abaixo. Neste caso, obtemos os índices dos elementos menores do que 5 e os substituímos por 0:
arr = np.array([[1,2,3], [4,5,6], [7,8,9]])
arr2 = np.where(arr < 5, 0, arr)
print(arr2)
# resultados:
# [[0 0 0]
# [0 5 6]
# [7 8 9]]
arr = np.array([[1,2,3], [4,5,6], [7,8,9]])
arr2 = np.where((arr < 5) & ( arr > 2), 0, arr)
print(arr2)
# resultados:
# [[1 2 0]
# [0 5 6]
# [7 8 9]]
np.logical_and(), np.logical_or() e np.logical_not()
O NumPy também fornece funções próprias para operações lógicas: np.logical_and(), np.logical_or() e np.logical_not(). Essas funções podem ser usadas para criar condições booleanas complexas. Veja um exemplo ilustrativo:
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
mask = np.logical_and(arr > 5, arr < 9) # verifica os elementos maiores do que 5 e menores do que 9
print(mask)
# resultados: [False False False False False True True True False]
Conclusões
Neste post, abordamos como vetorizar operações condicionais usando o NumPy. Discutimos algumas técnicas comuns para conseguir isso: máscaras booleanas, ‘np.where()’ e funções lógicas. Ao aproveitar essas técnicas, você pode melhorar significativamente o desempenho dos seus códigos, reduzindo o número de loops e iterações.
Veja também:
Encontrou algum erro ou quer fazer uma sugestão? Por favor, entre em contato usando nosso formulário de contatos.