Množenje matrik je temeljna operacija v linearni algebri.
Na splošno ga uporabljamo v številnih aplikacijah, kot so obdelava slik, strojno učenje in še veliko več. NumPy je pomemben paket Python za znanstveno računalništvo.
Vendar si bomo v tej objavi ogledali različne metode za izvajanje množenja matrik v Pythonu brez uporabe NumPy.
Bomo uporabili ugnezdene zanke, vgrajeno funkcijo map() in razumevanje seznama.
Poleg tega si bomo ogledali prednosti in slabosti vsake strategije ter kdaj uporabiti vsako od njih. Če ste začetnik v linearni algebri in želite izvedeti več o množenju matrik; nadaljujte z branjem.
Kje uporabljamo matrično množenje?
Matrično množenje se uporablja v računalniška grafika za spreminjanje 2D in 3D vizualnih podob. Predmete na zaslonu lahko na primer vrtite, spreminjate in prevajate. Matrike se uporabljajo pri obdelavi slik za predstavitev slik kot nizov slikovnih pik. Poleg tega se lahko matrike uporabljajo za izvajanje operacij, kot je filtriranje slike.
Uporabljamo tudi matrike v strojno učenje. Lahko nam pomagajo pri predstavitvi podatkov in parametrov modela. Izvajamo lahko številne operacije, kot je računanje pikčastih produktov in matrično-vektorskih produktov.
Zagotovo je ta operacija zelo koristna tudi v znanstvenih operacijah. Uporabljamo ga lahko v fiziki in tehniki za opisovanje fizikalnih količin. Zato lahko operiramo z vektorji in tenzorji.
Zakaj se morda ne odločimo za uporabo NumPy?
Medtem ko je NumPy a Knjižnica Python, ni vedno idealna možnost za matrično množenje. Morda se ne bomo odločili za uporabo NumPy iz razlogov, kot so velikost in odvisnost, učenje in podedovani sistemi.
Uporaba vgrajenih funkcij Pythona ali razvijanje kode po meri je lahko v nekaterih primerih bolj učinkovito. Vendar je ključnega pomena omeniti, da je NumPy močna knjižnica. Poleg tega ga lahko uporabite tudi za matrično množenje.
Zdaj pa si poglejmo, kako lahko dosežemo množenje matrik brez NumPy.
Metoda ugnezdenih zank
Tehnika ugnezdenih zank uporablja ugnezdene zanke za izvajanje množenja matrik v Pythonu. Funkcija ponovi vsak element matrike. In jih pomnoži z nizom ugnezdenih zank. Funkcija vrne rezultat, ki se shrani v novo matriko.
Ta pristop je enostaven za razumevanje. Vendar pa morda ne bo tako učinkovit kot drugi načini, zlasti za večje matrice. Kljub temu je to čudovita izbira za vas, če ste začetnik v linearni algebri.
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])
# Nastavite matriko rezultatov na ničle.
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
Oglejmo si primer, kako to storiti. Lahko samo dodate te vrstice kode spodaj, da preizkusite ta primer.
# 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]]
prednosti:
- Lahko za razumevanje.
- Odlično za novince ali tiste, ki iščejo globlje razumevanje množenja matrik.
slabosti:
- Ni tako učinkovito kot alternativne tehnike, zlasti za večje matrice.
- Ni tako berljiv kot alternativni pristopi.
metoda funkcije map().
Funkcijska metoda map() ponuja alternativni pristop za izvajanje množenja matrik v Pythonu. Pri tem pristopu uporabljamo vgrajeno funkcijo map(). Zato uporabljamo orodje za funkcionalno programiranje, ki uporabi ponujeno funkcijo za vsak element, ki ga je mogoče ponoviti (seznam, tuple itd.). Poleg tega funkcija map() sprejema dva parametra, funkcijo in iterable. In vrne iterator, ki uporabi funkcijo za vsak element, ki ga je mogoče ponoviti.
Pri tem pristopu gremo skozi vsakega člana matrike in izvedemo množenje z uporabo ugnezdene funkcije map().
Funkcija zip() se uporablja za vzporedno ponavljanje skozi vsak element matrik.
Končno se za seštevanje rezultatov uporabi funkcija sum().
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
Zdaj lahko znova preizkusimo našo kodo s primerom.
# 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]]
prednosti
- Učinkovitejši od pristopa zloženih zank
- Za poenostavitev kode uporablja funkcionalno programiranje.
Slabosti
- Nekateri ljudje, ki niso seznanjeni s funkcionalnim programiranjem, se bodo morda zdeli manj berljivi.
- Je manj razumljiva kot tehnika ugnezdenih zank.
Metoda razumevanja seznama
Razumevanje seznama vam omogoča ustvarjanje novega seznama v eni vrstici kode. To je torej z uporabo izraza za vsakega člana obstoječega seznama.
Pri tem pristopu se množenje izvaja z večkratnim ponavljanjem skozi vsak člen matrike. Uporabljamo večplastno razumevanje seznama.
# 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]]
prednosti
- V primerjavi z metodo funkcije map() krajši in bolj berljiv.
Slabosti
- Morda je manj učinkovito kot uporaba funkcije map(), zlasti za velike matrike.
- Je težji od pristopa ugnezdenih zank.
zaključek
V tej objavi smo si ogledali alternative uporabi NumPy pri množenju matrik v Pythonu. Izvedli smo množenje matrik v ugnezdenih zankah, vgrajeno funkcijo map() in razumevanje seznama.
Najboljša strategija bo temeljila na posebnih potrebah vašega projekta.
Vsaka od strategij ima svoje prednosti in slabosti. Če želite zagotoviti, da funkcija deluje pravilno, je dobro dodati nekaj testnih primerov z različnimi dimenzijami in vrednostmi matrike.
Vključiti morate tudi nekaj testov učinkovitosti, da primerjate, kako dobro se te metode izvajajo.
Pustite Odgovori