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_matricein.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_matriceout.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

produs_matricein.txt
2 3
1 -2 3
0 1 -1
2
3 1
-1 -1
0 1
produs_matriceout.txt
Datele introduse corespund restrictiilor impuse
5 6
-1 -2

Exemplul 2

produs_matricein.txt
2 3
-100 2000 0
5982 0 0
1
4683
Datele introduse nu corespund restrictiilor impuse

Rezolvare

def citeste_matrice(file):
    dimensiuni = list(map(int, file.readline().split()))
    matrice = [list(map(int, file.readline().split())) for _ in range(dimensiuni[0])]
    return dimensiuni, matrice

def scrie_matrice(file, matrice):
    for linie in matrice:
        file.write(' '.join(map(str, linie)) + '\n')

def produs_matrice(matrice_a, matrice_b):
    m, n = len(matrice_a), len(matrice_a[0])
    n1, p = len(matrice_b), len(matrice_b[0])

    if n != n1:
        return None  # Nu se poate realiza produsul matriceal

    matrice_c = [[0 for _ in range(p)] for _ in range(m)]

    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

# Citire date de intrare
with open("produs_matricein.txt", "r") as file:
    dimensiuni_a, matrice_a = citeste_matrice(file)
    _ = file.readline()  # Ignorăm linia cu numărul p
    dimensiuni_b, matrice_b = citeste_matrice(file)

# Calcul produs matriceal
rezultat = produs_matrice(matrice_a, matrice_b)

# Scriere rezultat în fișierul de ieșire
if rezultat:
    with open("produs_matriceout.txt", "w") as file:
        scrie_matrice(file, rezultat)
else:
    print("Produsul matriceal nu este posibil din cauza dimensiunilor incorecte.")

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].