A multiplicação de matrizes é uma operação fundamental na álgebra linear.
Geralmente o usamos em vários aplicativos, como processamento de imagens, aprendizado de máquina e muito mais. NumPy é um notável pacote Python para computação científica.
No entanto, neste post, veremos vários métodos para fazer a multiplicação de matrizes em Python sem utilizar o NumPy.
nós iremos utilizar loops aninhados, a função map() integrada e a compreensão da lista.
Além disso, veremos as vantagens e desvantagens de cada estratégia, bem como quando aplicar cada uma delas. Se você é novo em álgebra linear e quer aprender mais sobre multiplicação de matrizes; continue lendo.
Onde usamos a multiplicação de matrizes?
A multiplicação de matrizes é usada em gráficos por computador para alterar visuais 2D e 3D. Por exemplo, você pode girar, dimensionar e transladar objetos na tela. As matrizes são usadas no processamento de imagens para representar imagens como matrizes de pixels. Além disso, matrizes podem ser utilizadas para realizar operações como filtragem de imagens.
Também fazemos uso de matrizes em aprendizado de máquina. Eles podem nos ajudar a representar os dados e os parâmetros do modelo. Podemos realizar inúmeras operações, como calcular produtos escalares e produtos matriciais-vetoriais.
Certamente, esta operação também é altamente vantajosa em operações científicas. Podemos usá-lo em física e engenharia para descrever quantidades físicas. Assim, podemos operar com vetores e tensores.
Por que não podemos optar por usar o NumPy?
Enquanto NumPy é um Biblioteca Python, nem sempre é a opção ideal para multiplicação de matrizes. Podemos optar por não usar o NumPy por motivos como tamanho e dependência, aprendizado e sistemas legados.
Usar as funções integradas do Python ou desenvolver código personalizado pode ser mais eficiente em alguns casos. É crucial observar, no entanto, que NumPy é uma biblioteca forte. Além disso, você também pode usá-lo para multiplicação de matrizes.
Agora, vamos dar uma olhada em como podemos alcançar a multiplicação de matrizes sem o NumPy.
Método de loops aninhados
A técnica de loops aninhados usa loops aninhados para executar a multiplicação de matrizes em Python. A função itera sobre cada elemento da matriz. E os multiplica usando uma série de loops aninhados. A função retorna o resultado, que é armazenado em uma nova matriz.
Essa abordagem é fácil de entender. No entanto, pode não ser tão eficiente quanto outras formas, principalmente para matrizes maiores. No entanto, é uma escolha maravilhosa para você se você é novo em álgebra linear.
def matrix_multiplication(A, B):
# Determine the matrices' dimensions.
rows_A = len(A)
cols_A = len(A[0])
rows_B = len(B)
cols_B = len(B[0])
# Defina a matriz de resultados para zeros.
result = [[0 for row in range(cols_B)] for col in
range(rows_A)]
# Iterate through rows of A
for s in range(rows_A):
# Iterate through columns of B
for j in range(cols_B):
# Iterate through rows of B
for k in range(cols_A):
result[s][j] += A[s][k] * B[k][j]
return result
Vamos dar um exemplo de como fazer isso. Você pode simplesmente adicionar estas linhas de código abaixo para testar este exemplo.
# Sample matrices
A = [[1, 4, 3], [4, 9, 6]]
B = [[7, 8], [9, 10], [11, 12]]
# Perform matrix multiplication
result = matrix_multiplication(A, B)
# Print the result
print(result)
# Output: [[76, 84], [175, 194]]
Benefícios:
- Fácil de compreender.
- Ótimo para iniciantes ou para aqueles que buscam uma compreensão mais profunda da multiplicação de matrizes.
Desvantagens:
- Não é tão eficaz quanto as técnicas alternativas, principalmente para matrizes maiores.
- Não é tão legível quanto abordagens alternativas.
método de função map()
O método de função map() fornece uma abordagem alternativa para fazer a multiplicação de matrizes em Python. Nesta abordagem, usamos a função map() incorporada. Portanto, usamos uma ferramenta de programação funcional que aplica uma função fornecida a cada elemento iterável (lista, tupla, etc.). Além disso, a função map() aceita dois parâmetros, uma função e um iterável. E retorna um iterador que aplica a função a cada elemento iterável.
Nesta abordagem, passamos por cada membro da matriz e fazemos a multiplicação usando a função map() aninhada.
A função zip() é usada para percorrer cada elemento das matrizes em paralelo.
Finalmente, a função sum() é usada para somar os resultados.
def matrix_multiplication(A, B):
# To get the dimensions of the matrices
rows_A = len(A)
cols_A = len(A[0])
rows_B = len(B)
cols_B = len(B[0])
# We use map() function for multiplication.
result = [[sum(a * b for a, b in zip(row_a, col_b)) for
col_b in zip(*B)] for row_a in A]
return result
Agora, novamente, podemos testar nosso código com um exemplo.
# Example matrices
A = [[3, 2, 3], [4, 5, 6]]
B = [[7, 8], [9, 10], [11, 12]]
# Use map() function to perform matrix multiplication
result = list(map(lambda x: list(map(lambda y: sum(i*j
for i,j in zip(x,y)), zip(*B))), A))
# Print the result
print(result)
# Output: [[72, 80], [139, 154]]
Vantagens
- Mais eficaz do que a abordagem de loops empilhados
- Ele usa programação funcional para tornar o código mais simples.
Desvantagens
- Algumas pessoas que não estão familiarizadas com a programação funcional podem achar que é menos legível.
- É menos compreensível do que a técnica de loops aninhados.
Método de compreensão de lista
A compreensão de lista permite gerar uma nova lista em uma única linha de código. Portanto, isso ocorre aplicando uma expressão a cada membro de uma lista existente.
Nesta abordagem, a multiplicação é realizada iterando repetidamente através de cada membro da matriz. Estamos usando compreensão de lista em camadas.
# Sample matrices
A = [[1, 12, 3], [14, 5, 6]]
B = [[7, 8], [9, 10], [12, 12]]
# Matrix multiplication using list comprehension
result = [[sum(A[i][k] * B[k][j] for k in range(len(A[0])))
for j in range(len(B[0]))] for i in range(len(A))]
# Print the result
print(result)
[[151, 164], [215, 234]]
Benefícios
- Comparado com o método de função map(), mais curto e mais legível.
Desvantagens
- Pode ser menos eficaz do que usar a função map(), principalmente para matrizes grandes.
- É mais difícil do que a abordagem de loops aninhados.
Conclusão
Neste post, vimos alternativas para usar NumPy ao multiplicar matrizes em Python. Realizamos a multiplicação de matrizes em loops aninhados, a função map() integrada e a compreensão de lista.
A melhor estratégia dependerá das necessidades específicas do seu projeto.
Cada uma das estratégias tem prós e contras próprios. Para garantir que a função esteja funcionando corretamente, é uma boa ideia adicionar alguns casos de teste com várias dimensões e valores de matriz.
Você também deve incluir alguns testes de desempenho para comparar a execução desses métodos.
Deixe um comentário