1313 - Produs Matrice
De la Universitas MediaWiki
Cerinta
Se dau dimensiunile a două matrice, A și B și valorile acestora. Calculați produsul lor .
Date de intrare
Fișierul de intrare produs_matrice.txt conține pe prima linie numerele m n, apoi începând cu următoarea linie matricea A de dimensiuni (m,n) . Pe linia m+2 numărul p, apoi matricea B de dimensiuni (n,p) .
Date de iesire
Fișierul de ieșire produs_matrice.txt va conține matricea C , construită pe baza cerinței .
Restrictii si precizari
- 1 ≤ n , m , p ≤ 100
- -10.000 ≤ A[i][j] , B[i][j] ≤ 10.000
Exemplul 1
- Intrare
- 2 3
- 1 -2 3
- 0 1 -1
- 2
- 3 1
- -1 -1
- 0 1
- Iesire
- Datele introduse corespund restrictiilor impuse
- 5 6
- -1 -2
Exemplul 2
- Intrare
- 2 3
- -100 2000 0
- 5982 0 0
- 1
- 4613
- Iesire
- Datele introduse nu corespund restrictiilor impuse
Rezolvare
def citeste_matrice(fisier):
# Citeste dimensiunile matricei
m, n = map(int, fisier.readline().split())
matrice = []
# Citeste elementele matricei
for _ in range(m):
linie = list(map(int, fisier.readline().split()))
matrice.append(linie)
return matrice, m, n
def produs_matrici(matrice_A, m, n, matrice_B, n, p):
# Initializare matrice rezultat
matrice_C = [[0] * p for _ in range(m)]
# Calculul produsului matricial
for i in range(m):
for j in range(p):
for k in range(n):
matrice_C[i][j] += matrice_A[i][k] * matrice_B[k][j]
return matrice_C
def scrie_matrice(fisier, matrice):
# Scrie dimensiunile matricei rezultat
m = len(matrice)
n = len(matrice[0])
fisier.write(f"{m} {n}\n")
# Scrie elementele matricei rezultat
for linie in matrice:
fisier.write(" ".join(map(str, linie)) + "\n")
def main():
# Citirea datelor de intrare din fisier
with open("produs_matrice.txt", "r") as f:
matrice_A, m, n = citeste_matrice(f)
p = int(f.readline())
matrice_B, n, p = citeste_matrice(f)
# Calculul produsului matricial
matrice_C = produs_matrici(matrice_A, m, n, matrice_B, n, p)
# Scrierea rezultatului in fisierul de iesire
with open("produs_matrice.txt", "w") as g:
scrie_matrice(g, matrice_C)
if __name__ == "__main__":
main()
Explicatie
Dacă se înmulțeste A cu B și rezultatul se află în C , atunci elementul C[i][j] reprezintă suma de produse dintre elementele de pe linia i a matricei A cu elementele de pe coloana j a matricei B. Având exemplul nostru , luăm C[1][2] = A[1][1] * B[1][2] + A[1][2] * B[2][2] + A[1][3] * B[3][2].