Înmulțirea matricelor este o operație fundamentală în algebra liniară.
În general, îl folosim în numeroase aplicații, cum ar fi procesarea imaginilor, învățarea automată și multe altele. NumPy este un pachet Python notabil pentru calculul științific.
Cu toate acestea, în această postare, ne vom uita la diferite metode pentru a face multiplicarea matricelor în Python fără a utiliza NumPy.
Vom folosi bucle imbricate, funcția încorporată map() și înțelegerea listelor.
În plus, ne vom uita la beneficiile și dezavantajele fiecărei strategii, precum și când să le aplicăm fiecare dintre ele. Dacă sunteți nou în algebra liniară și doriți să aflați mai multe despre înmulțirea matriceală; continua sa citesti.
Unde folosim multiplicarea matriceală?
Înmulțirea matriceală este utilizată în grafică computerizată pentru a modifica imaginile 2D și 3D. De exemplu, puteți roti, scala și traduce obiecte de pe ecran. Matricele sunt utilizate în procesarea imaginilor pentru a reprezenta imaginile ca matrice de pixeli. În plus, matricele pot fi folosite pentru a efectua operațiuni precum filtrarea imaginilor.
De asemenea, folosim matrice în masina de învățare. Ele ne pot ajuta să reprezentăm datele și parametrii modelului. Putem efectua numeroase operațiuni, cum ar fi calcularea produselor punctiforme și a produselor matrice-vectorale.
Cu siguranță, această operațiune este foarte avantajoasă și în operațiunile științifice. Îl putem folosi în fizică și inginerie pentru a descrie mărimile fizice. Prin urmare, putem opera cu vectori și tensori.
De ce este posibil să nu alegem să folosim NumPy?
În timp ce NumPy este un Biblioteca Python, nu este întotdeauna opțiunea ideală pentru înmulțirea matricei. Este posibil să nu alegem să folosim NumPy din motive precum dimensiunea și dependența, învățarea și sistemele moștenite.
Utilizarea funcțiilor încorporate Python sau dezvoltarea codului personalizat poate fi mai eficientă în unele cazuri. Este esențial să rețineți, totuși, că NumPy este o bibliotecă puternică. În plus, îl puteți folosi și pentru înmulțirea matricei.
Acum, să aruncăm o privire la cum putem realiza înmulțirea matricei fără NumPy.
Metoda bucle imbricate
Tehnica bucle imbricate folosește bucle imbricate pentru a executa multiplicarea matricei în Python. Funcția iterează peste fiecare element de matrice. Și le înmulțește folosind o serie de bucle imbricate. Funcția returnează rezultatul, care este stocat într-o nouă matrice.
Această abordare este ușor de înțeles. Cu toate acestea, este posibil să nu fie la fel de eficient ca alte moduri, în special pentru matrice mai mari. Cu toate acestea, este o alegere minunată pentru dvs. dacă sunteți nou în algebra liniară.
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])
# Setați matricea rezultatului la zerouri.
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
Să avem un exemplu despre cum să facem asta. Puteți doar să adăugați aceste linii de cod mai jos pentru a testa acest exemplu.
# 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]]
Beneficii:
- Ușor de înțeles.
- Excelent pentru începători sau cei care doresc o înțelegere mai profundă a înmulțirii matriceale.
Dezavantaje:
- Nu la fel de eficiente ca tehnicile alternative, în special pentru matrice mai mari.
- Nu este la fel de lizibil ca abordările alternative.
metoda funcției map().
Metoda funcției map() oferă o abordare alternativă pentru a face multiplicarea matricelor în Python. În această abordare, folosim funcția încorporată map(). Prin urmare, folosim un instrument de programare funcțional care aplică o funcție furnizată fiecărui element iterabil (listă, tuplu etc.). De asemenea, funcția map() acceptă doi parametri, o funcție și un iterabil. Și returnează un iterator care aplică funcția fiecărui element iterabil.
În această abordare, trecem prin fiecare membru al matricei și facem multiplicarea folosind funcția imbricată map().
Funcția zip() este utilizată pentru a itera fiecare element al matricelor în paralel.
În cele din urmă, funcția sum() este utilizată pentru a aduna rezultatele.
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
Acum, din nou, putem testa codul nostru cu un exemplu.
# 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]]
Avantaje
- Mai eficientă decât abordarea cu bucle stivuite
- Utilizează programarea funcțională pentru a simplifica codul.
Dezavantaje
- Unii oameni care nu sunt familiarizați cu programarea funcțională le pot găsi mai puțin lizibile.
- Este mai puțin de înțeles decât tehnica buclelor imbricate.
Metoda de înțelegere a listelor
Înțelegerea listei vă permite să generați o nouă listă într-o singură linie de cod. Prin urmare, aceasta se face prin aplicarea unei expresii fiecărui membru al unei liste existente.
În această abordare, înmulțirea este efectuată prin repetarea repetată a fiecărui membru al matricei. Folosim listele de înțelegere stratificate.
# 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]]
Beneficii
- În comparație cu metoda funcției map(), mai scurtă și mai lizibilă.
Dezavantaje
- Poate fi mai puțin eficient decât utilizarea funcției map(), în special pentru matrice mari.
- Este mai dificilă decât abordarea cu bucle imbricate.
Concluzie
În această postare, ne-am uitat la alternative la utilizarea NumPy atunci când înmulțim matrice în Python. Am efectuat multiplicarea matricei în bucle imbricate, funcția încorporată map() și înțelegerea listelor.
Cea mai bună strategie se va baza pe nevoile particulare ale proiectului dumneavoastră.
Fiecare dintre strategii are avantaje și dezavantaje proprii. Pentru a vă asigura că funcția funcționează corect, este o idee bună să adăugați câteva cazuri de testare cu diferite dimensiuni și valori ale matricei.
Ar trebui să includeți și câteva teste de performanță pentru a compara cât de bine se execută aceste metode.
Lasă un comentariu