English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste exemplo, vamos aprender a multiplicar matrizes de duas maneiras diferentes: laços aninhados e compreensão de listas aninhadas
Para entender este exemplo, você deve entender o seguinteProgramação PythonTema:
Em Python, podemos implementar a matriz como uma lista aninhada (listas dentro de listas).
Podemos considerar cada elemento como uma linha da matriz.
Por exemplo, X = [[1, 2], [4, 5], [3, 6]] representa um3x2Matriz.
A primeira linha pode ser escolhida como X[0]. Além disso, o elemento da primeira linha e primeira coluna pode ser escolhido como X[0][0].
A multiplicação de duas matrizes X e Y é definida apenas quando o número de colunas de X é igual ao número de linhas de Y.
Se X for uma matriz n x m e Y for uma matriz m x l, então XY é definido, com dimensões n x l (mas YX não está definido). Abaixo estão algumas maneiras de implementar a multiplicação de matrizes em Python.
# Programar multiplicação de matrizes usando loops aninhados # 3x3 matriz X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 Matriz Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # Resultado 3x4 result = [[0,0,0,0], [0,0,0,0], [0,0,0,0]] # Percorrer linhas de X for i in range(len(X)): # Percorrer colunas de Y for j in range(len(Y[0])): # Percorrer linhas de Y for k in range(len(Y)): result[i][j] += X[i][k] * Y[k][j] for r in result: print(r)
Resultado de Saída
[114, 160, 60, 27]] [74, 97, 73, 14]] [119, 157, 112, 23]]
Neste programa, usamos loops aninhados para percorrer cada linha e coluna. Somamos os produtos no resultado.
Essa técnica é simples, mas à medida que aumentamos o grau da matriz, a quantidade de cálculo é grande.
Para operações de matrizes maiores, recomendamos usar pacotes otimizados, comoNumPy,ela é várias vezes mais rápida que o código acima (aproximadamente1000 vezes).
# Programar multiplicação de matrizes usando compreensão de lista # 3x3 Matriz X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 Matriz Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # Resultado 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)
A saída deste programa é a mesma que a acima. Para entender o código acima, devemos primeiro entender a função integrada zip() e usar*Descomprimir parâmetros de operador.
Usamos listas aninhadas para percorrer cada elemento da matriz. O código parece complexo e difícil de ler no início. Mas uma vez que você dominar a técnica de compreensão de listas, talvez você não queira usar loops aninhados.