Maatriksi korrutamine on lineaaralgebra põhitehing.
Tavaliselt kasutame seda paljudes rakendustes, nagu pilditöötlus, masinõpe ja palju muud. NumPy on märkimisväärne Pythoni pakett teaduslikuks andmetöötluseks.
Kuid selles postituses vaatleme erinevaid meetodeid maatriksi korrutamiseks Pythonis ilma NumPy kasutamata.
Me kasutame ära pesastatud silmuseid, sisseehitatud funktsioon map() ja loendi mõistmine.
Lisaks vaatleme iga strateegia eeliseid ja puudusi ning ka seda, millal neid rakendada. Kui olete lineaarse algebraga uustulnuk ja soovite maatrikskorrutamise kohta rohkem teada saada; jätka lugemist.
Kus me kasutame maatrikskorrutamist?
Kasutatakse maatrikskorrutamist arvutigraafika 2D ja 3D visuaalide muutmiseks. Näiteks saate ekraanil olevaid objekte pöörata, skaleerida ja tõlkida. Maatrikse kasutatakse pilditöötluses piltide esitamiseks pikslite massiividena. Lisaks võib maatrikse kasutada selliste toimingute tegemiseks nagu pildi filtreerimine.
Kasutame ka maatrikse masinõpe. Need aitavad meil esitada andmeid ja modelleerida parameetreid. Saame läbi viia mitmeid toiminguid, näiteks arvutada punktkorrutised ja maatriks-vektorkorrutised.
Kindlasti on see operatsioon väga kasulik ka teaduslikes operatsioonides. Saame seda kasutada füüsikas ja tehnikas füüsikaliste suuruste kirjeldamiseks. Seega saame opereerida vektorite ja tenoritega.
Miks me ei pruugi valida NumPy kasutamist?
Kuigi NumPy on a Pythoni raamatukogu, ei ole see alati ideaalne võimalus maatriksikorrutamiseks. Me ei pruugi NumPyt kasutada sellistel põhjustel nagu suurus ja sõltuvus, õppimine ja pärandsüsteemid.
Pythoni sisseehitatud funktsioonide kasutamine või kohandatud koodi arendamine võib mõnel juhul olla tõhusam. Siiski on oluline märkida, et NumPy on tugev raamatukogu. Lisaks saate seda kasutada ka maatrikskorrutamiseks.
Vaatame nüüd, kuidas maatrikskorrutamist ilma NumPyta saavutada.
Pesastatud silmuste meetod
Pesastatud silmuste tehnika kasutab Pythonis maatriksi korrutamiseks pesastatud silmuseid. Funktsioon kordub iga maatriksi elemendiga. Ja see korrutab need pesastatud silmuste seeria abil. Funktsioon tagastab tulemuse, mis salvestatakse uude maatriksisse.
Seda lähenemist on lihtne mõista. Kuid see ei pruugi olla nii tõhus kui muud viisid, eriti suuremate maatriksite puhul. Siiski on see suurepärane valik teile, kui olete lineaarse algebraga uustulnuk.
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])
# Määrake tulemusmaatriksiks nullid.
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
Toome näite, kuidas seda teha. Selle näite testimiseks võite lihtsalt lisada need koodiread allpool.
# 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]]
Eelised:
- Kergesti mõistetav.
- Suurepärane algajatele või neile, kes soovivad maatriksi korrutamisest sügavamat arusaamist.
Puudused:
- Pole nii tõhus kui alternatiivsed tehnikad, eriti suuremate maatriksite puhul.
- See ei ole nii loetav kui alternatiivsed lähenemisviisid.
map() funktsiooni meetod
Funktsiooni meetod map() pakub alternatiivset lähenemisviisi maatriksi korrutamiseks Pythonis. Selle lähenemisviisi puhul kasutame sisseehitatud funktsiooni map(). Seetõttu kasutame funktsionaalset programmeerimistööriista, mis rakendab iga itereeritava elemendi (loend, korteež jne) jaoks ette nähtud funktsiooni. Samuti aktsepteerib funktsioon map() kahte parameetrit, funktsiooni ja itereeritavat. Ja see tagastab iteraatori, mis rakendab funktsiooni igale itereeritavale elemendile.
Selle lähenemisviisi korral käime läbi maatriksi iga liikme ja korrutame funktsiooni Nesd map() abil.
Funktsiooni zip() kasutatakse maatriksite iga elemendi paralleelseks itereerimiseks.
Lõpuks kasutatakse tulemuste liitmiseks funktsiooni summa().
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
Nüüd saame jälle oma koodi näite abil testida.
# 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]]
Eelised
- Tõhusam kui virnastatud silmuste meetod
- See kasutab koodi lihtsamaks muutmiseks funktsionaalset programmeerimist.
Puudused
- Mõnele inimesele, kes ei tunne funktsionaalset programmeerimist, võib see olla vähem loetav.
- See on vähem arusaadav kui pesastatud silmuste tehnika.
Loendi mõistmise meetod
Loendi mõistmine võimaldab teil luua uue loendi ühe koodireal. Seega rakendatakse avaldis olemasoleva loendi igale liikmele.
Selle lähenemisviisi korral viiakse korrutamine läbi iga maatriksiliikme korduva itereerimise teel. Kasutame kihilist loendi mõistmist.
# 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]]
kasu
- Võrreldes funktsiooni meetodiga map() lühem ja loetavam.
Puudused
- See võib olla vähem efektiivne kui funktsiooni map() kasutamine, eriti suurte maatriksite puhul.
- See on keerulisem kui pesastatud silmuste meetod.
Järeldus
Selles postituses vaatlesime alternatiive NumPy kasutamisele Pythonis maatriksite korrutamisel. Teostasime maatriksi korrutamist pesastatud tsüklites, sisseehitatud funktsiooni map() ja loendi mõistmist.
Parim strateegia sõltub teie projekti konkreetsetest vajadustest.
Igal strateegial on oma plussid ja miinused. Funktsiooni õiges töös veendumiseks on hea mõte lisada mõned testjuhtumid erinevate maatriksi mõõtmete ja väärtustega.
Peaksite lisama ka mõned jõudlustestid, et võrrelda nende meetodite toimimist.
Jäta vastus