Programa Python para multiplicar duas matrizes

Neste exemplo, aprenderemos a multiplicar matrizes usando duas maneiras diferentes: loop aninhado e comprensão de lista aninhada

Para entender este exemplo, você deve ter conhecimento dos seguintes tópicos de programação Python:

  • Python for Loop
  • Lista Python
  • Matrizes Python e matrizes NumPy

Em Python, podemos implementar uma matriz como uma lista aninhada (lista dentro de uma lista).

Podemos tratar cada elemento como uma linha da matriz.

Por exemplo X = ((1, 2), (4, 5), (3, 6)), representaria uma 3x2matriz.

A primeira linha pode ser selecionada como X(0). E, o elemento na primeira linha, a primeira coluna pode ser selecionada como X(0)(0).

A multiplicação de duas matrizes X e Y é definida apenas se o número de colunas em X for igual ao número de linhas Y.

Se X é uma n x mmatriz e Y é uma m x lmatriz, então, XY é definido e tem a dimensão n x l(mas YX não é definido). Aqui estão algumas maneiras de implementar a multiplicação de matrizes em Python.

Código Fonte: Multiplicação de Matriz usando Loop Aninhado

# Program to multiply two matrices using nested loops # 3x3 matrix X = ((12,7,3), (4 ,5,6), (7 ,8,9)) # 3x4 matrix Y = ((5,8,1,2), (6,7,3,0), (4,5,9,1)) # result is 3x4 result = ((0,0,0,0), (0,0,0,0), (0,0,0,0)) # iterate through rows of X for i in range(len(X)): # iterate through columns of Y for j in range(len(Y(0))): # iterate through rows of Y for k in range(len(Y)): result(i)(j) += X(i)(k) * Y(k)(j) for r in result: print(r) 

Resultado

 (114, 160, 60, 27) (74, 97, 73, 14) (119, 157, 112, 23) 

Neste programa, usamos forloops aninhados para iterar em cada linha e em cada coluna. Acumulamos a soma dos produtos no resultado.

Essa técnica é simples, mas computacionalmente cara à medida que aumentamos a ordem da matriz.

Para operações de matriz maiores, recomendamos pacotes de software otimizados como NumPy, que é várias (na ordem de 1000) vezes mais rápido que o código acima.

Código-fonte: Multiplicação de matriz usando compreensão de lista aninhada

# Program to multiply two matrices using list comprehension # 3x3 matrix X = ((12,7,3), (4 ,5,6), (7 ,8,9)) # 3x4 matrix Y = ((5,8,1,2), (6,7,3,0), (4,5,9,1)) # result is 3x4 result = ((sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)) for X_row in X) for r in result: print(r) 

O resultado deste programa é o mesmo acima. Para entender o código acima, devemos primeiro saber sobre a função embutida zip()e descompactar a lista de argumentos usando o operador *.

Usamos compreensão de lista aninhada para iterar em cada elemento da matriz. O código parece complicado e ilegível no início. Mas depois que você pegar o jeito das compreensões de lista, provavelmente não vai voltar aos loops aninhados.

Artigos interessantes...