Search
Close this search box.
🚀 Vetorização com NumPy: eficiência em códigos Python
vetorização com NumPy

Posts Relacionados:

Não aguenta mais códigos lentos? Neste post, exploraremos a vetorização com NumPy. Além de garantir eficiência e aceleração em códigos Python, a vetorização também é um conhecimento essencial para implementar modelos de IA e machine learning.

Receba nossa newsletter

Por que vetorizar?

vector

Vetorização refere-se à execução de operações em vetores, matrizes ou tensores inteiros em vez de elementos individuais. A vetorização remove gargalos executando operações em conjuntos de dados inteiros de uma só vez. Isso aumenta significativamente a velocidade dos códigos Python em comparação com operações executadas com loops para grandes conjuntos de dados. Assim, o Python se torna capaz de processar dados muito mais rapidamente, mesmo em dispositivos com recursos limitados.

A codificação ineficiente com loops pode transformar tarefas simples em consumidores de tempo e recursos. Isso é especialmente importante quando lidamos com grandes conjuntos de dados, ocorrência comum durante o treinamento de modelos de machine learning. No exemplo abaixo, ilustramos isso comparando o tempo de execução necessário para realizar uma soma usando um loop tradicional e a mesma operação vetorizada com NumPy. Veja as diferenças nos tempos de execução obtidos.
				
					# Comparação do tempo de execução de uma soma com um loop tradicional e com NumPy em um conjunto grande de dados 
import numpy as np
import time

#loop tradicional
init = time.time()
tot = 0
for item in range(10000000):
    tot = tot + item
fim = time.time()

print('resultado da soma: ' + str(tot), 'tempo de execução: ' + str(round(fim - init, 5)))
# resultado da soma: 49999995000000 tempo de execução: 0.53615

# Vetorização com NumPy
init_np = time.time()
tot = 0
tot_np = np.sum(np.arange(10000000))
fim_np = time.time()

print('resultado da soma: ' + str(tot_np), 'tempo de execução: ' + str(round(fim_np - init_np, 5)))
# resultado da soma: 49999995000000 tempo de execução: 0.01661
				
			

Vetorização com o NumPy: eficiência e aceleração

O Python possui várias bibliotecas que permitem a vetorização de códigos. NumPy é uma das melhores e a mais tradicional para essa tarefa. Ele oferece inúmeras vantagens como métodos amigáveis, otimização e broadcasting.

Em termos práticos, a vetorização com NumPy envolve o uso de arrays. Estruturas de dados como listas e DataFrames são facilmente convertidos em NumPy arrays.

Uma vez no formato de arrays, os dados estão prontos para serem processados com operações vetorizadas, dispensando o uso de loops. Assim, os códigos Python adquirem eficiência, o que é crítico em campos como IA.

No exemplo abaixo, realizamos a conversão de uma lista aninhada em um NumPy array para aplicar a operação quadrada em todos os itens de uma só vez. Com isso, evitamos o uso de funções integradas do Python ou loops explícitos que são mais lentos devido a sobrecargas de interpretação a cada iteração.

				
					import numpy as np

lista_de_dados = [[1,2,3], [4,5,6], [7,8,9]] # Uma lista aninhada que representa uma matriz de números 
dados_vetorizados = np.array(lista_de_dados)**2 # converte a lista em array e calcula o quadrado de cada elemento
				
			

Como o NumPy torna códigos Python mais rápidos?

A vetorização com NumPy aproveita loops C altamente otimizados para ganhos de desempenho e simplifica cálculos complexos. Os algoritmos otimizados do NumPy são projetados para executar operações vetorizadas com eficiência notável. Além disso, ele também aproveita recursos de hardware eficientes e processamento paralelo.

Exemplos Práticos: Operações matemáticas facilitadas

Uma operação vetorizada aplica uma operação a cada elemento de uma matriz simultaneamente, em vez de iterar sobre os elementos usando um loop. Isso é possível porque os arrays NumPy são armazenados em blocos de memória contíguos, permitindo operações eficientes em vetores, matrizes ou tensores inteiros. A seguir, entenda como aproveitar essas vantagens para realizar operações matemáticas de forma facilitada.

Adição

A adição de dois arrays é uma das operações facilmente implementadas com NumPy. Ela pode ser usada em vários cenários, como, por exemplo, em uma simulação de física.
				
					import numpy as np

# Cre dois vetores
vetor1 = np.array([1, 2, 3])
vetor2 = np.array([4, 5, 6])

# Realize a soma vetorizada
resultado = vetor1 + vetor2
print(resultado)  # Output: [5 7 9]
				
			

Subtração

A subtração de arrays também é uma operação bastante comum. Por exemplo, ela é frequentemente usada para calcular a diferença entre dois gradientes em modelos de machine learning.
				
					import numpy as np

# Crie dois vetores de gradiente 
gradiente1 = np.array([0.2, 0.3, 0.4])
gradiente2 = np.array([0.1, 0.2, 0.3])

# Subtração vetorizada
diferenca = gradiente1 - gradiente2
print(diferenca)  # Output: [0.1 0.1 0.1]
				
			

Multiplicação

A multiplicação vetorizada pode ser usada, por exemplo, para calcular o produto elementar de dois vetores em um problema de ciência de dados. Veja como é simples executá-la:
				
					import numpy as np

# Crie dois vetores
vetor1 = np.array([2, 3, 4])
vetor2 = np.array([5, 6, 7])

# Multiplicação elementar vetorizada
resultado = vetor1 * vetor2
print(resultado)  # Output: [10 18 28]
				
			

Divisão

Podemos usar a divisão vetorizada em vários cenários, incluindo em uma simulação de física.
				
					import numpy as np

# Crie um vetor e um escalar
vetor = np.array([10, 20, 30])
scalar = 2

# Divisão vetorizada
resultado = vetor / scalar
print(resultado)  # Output: [5. 10. 15.]

				
			

Comparação de desempenho

Para ilustrar os benefícios de desempenho das operações vetorizadas, realizaremos outra comparação. Neste exemplo, iremos comparar o tempo necessário para a multiplicação elementar usando um loop e a abordagem vetorizada do NumPy:
				
					import numpy as np
import time

# Crie dois vetores grandes
vetor_a = np.random.rand(1000000)
vetor_b = np.random.rand(1000000)

# Multiplicação com loop tradicional
tempo_inicio = time.time()
resulto_loop = []
for i in range(len(vetor_a)):
    resulto_loop.append(vetor_a[i] * vetor_b[i])
tempo_fim = time.time()
print("Tempo com Loop:", tempo_fim - tempo_inicio)
# Output: Tempo com Loop: 0.20045876502990723

#  Multiplicação vetorizada
tempo_inicio = time.time()
resultado_vetorizado = vetor_a * vetor_b
tempo_fim = time.time()
print("Tempo Vetorizado:", tempo_fim - tempo_inicio)
# Output: Tempo Vetorizado: 0.002400636672973633
				
			
Com a diferença na velocidade verificada, fica claro por que a vetorização é essencial em algoritmos de IA e machine learning e também pode te auxiliar a acelerar seus códigos.

Encontrou algum erro ou quer fazer uma sugestão? Por favor, entre em contato usando nosso formulário de contatos.

Imagem com IA Generativa – Dia 199

IA generativa img 199

Arte com IA generativa: imagem do dia

Todos os dias, postamos um exemplo de imagem artística gerada com inteligência artificial.

Tutoriais

Postagens Mais Recentes

Outras Postagens Que Podem Interessar

Veja
Mais

Fique em contato

Se inscreva para receber nossa newsletter com novidades.

aprendiz artificial