Matricos daugyba yra pagrindinė tiesinės algebros operacija.
Paprastai jį naudojame daugelyje programų, tokių kaip vaizdo apdorojimas, mašininis mokymasis ir daugelyje kitų. „NumPy“ yra puikus „Python“ paketas, skirtas moksliniams kompiuteriams.
Tačiau šiame įraše apžvelgsime įvairius matricos daugybos metodus Python nenaudojant NumPy.
Mes panaudosime įdėtos kilpos, integruota map() funkcija ir sąrašo supratimas.
Be to, apžvelgsime kiekvienos strategijos privalumus ir trūkumus, taip pat, kada kiekvieną iš jų taikyti. Jei esate naujokas tiesine algebra ir norite daugiau sužinoti apie matricos daugybą; skaityk toliau.
Kur mes naudojame matricos dauginimą?
Matricos daugyba naudojama Kompiuterinė grafika pakeisti 2D ir 3D vaizdus. Pavyzdžiui, galite pasukti, keisti mastelį ir versti objektus ekrane. Matricos naudojamos vaizdo apdorojimui vaizduoti paveikslėlius kaip pikselių masyvus. Be to, matricos gali būti naudojamos tokioms operacijoms kaip vaizdo filtravimas.
Taip pat naudojame matricas mašininis mokymasis. Jie gali padėti mums pateikti duomenis ir modeliuoti parametrus. Galime atlikti daugybę operacijų, pavyzdžiui, skaičiuoti taškinius produktus ir matricos vektorinius produktus.
Žinoma, ši operacija taip pat yra labai naudinga mokslinėse operacijose. Jį galime naudoti fizikoje ir inžinerijoje fiziniams dydžiams apibūdinti. Taigi galime dirbti su vektoriais ir tenzoriais.
Kodėl negalime pasirinkti naudoti „NumPy“?
Nors NumPy yra a Python biblioteka, tai ne visada yra idealus matricos dauginimo variantas. Galime nenaudoti „NumPy“ dėl tokių priežasčių kaip dydis ir priklausomybė, mokymasis ir senos sistemos.
Kai kuriais atvejais gali būti efektyviau naudoti integruotas Python funkcijas arba kurti pasirinktinį kodą. Tačiau labai svarbu pažymėti, kad „NumPy“ yra stipri biblioteka. Be to, jį taip pat galite naudoti matricos dauginimui.
Dabar pažiūrėkime, kaip galime pasiekti matricos dauginimą be NumPy.
Įdėtos kilpos metodas
Įdėtųjų kilpų technika naudoja įdėtas kilpas, kad atliktų matricos dauginimą Python. Funkcija kartojasi per kiekvieną matricos elementą. Be to, jis padaugina juos naudodamas daugybę įdėtų kilpų. Funkcija grąžina rezultatą, kuris išsaugomas naujoje matricoje.
Šį požiūrį lengva suvokti. Tačiau tai gali būti ne tokia veiksminga kaip kiti būdai, ypač didesnėms matricoms. Tačiau tai puikus pasirinkimas, jei linijinės algebros dar nesate susipažinęs.
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])
# Nustatykite rezultatų matricą į nulius.
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
Pateiksime pavyzdį, kaip tai padaryti. Norėdami išbandyti šį pavyzdį, toliau galite pridėti šias kodo eilutes.
# 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]]
Privalumai:
- Lengva suvokti.
- Puikiai tinka naujokams arba tiems, kurie nori giliau suprasti matricos dauginimą.
Trūkumai:
- Ne tokie veiksmingi kaip alternatyvūs metodai, ypač didesnėms matricoms.
- Jis nėra toks skaitomas kaip alternatyvūs metodai.
map() funkcijos metodas
Map() funkcijos metodas suteikia alternatyvų matricos daugybos metodą Python. Taikydami šį metodą naudojame integruotą map() funkciją. Taigi mes naudojame funkcinį programavimo įrankį, kuris pritaiko pateiktą funkciją kiekvienam iteruojamam elementui (sąrašui, kortelei ir kt.). Be to, funkcija map() priima du parametrus: funkciją ir kartojamą. Ir grąžina iteratorių, kuris pritaiko funkciją kiekvienam iteruojamam elementui.
Taikydami šį metodą, pereiname per kiekvieną matricos narį ir atliekame dauginimą naudodami įdėtą map() funkciją.
Funkcija zip() naudojama lygiagrečiai kartoti kiekvieną matricos elementą.
Galiausiai funkcija sum() naudojama rezultatams sumuoti.
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
Dabar vėl galime išbandyti savo kodą naudodami pavyzdį.
# 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]]
Privalumai
- Veiksmingesnis nei sukrautų kilpų metodas
- Kad kodas būtų paprastesnis, naudojamas funkcinis programavimas.
Trūkumai
- Kai kuriems žmonėms, kurie nėra susipažinę su funkciniu programavimu, jis gali būti mažiau skaitomas.
- Tai mažiau suprantama nei įdėtos kilpos technika.
Sąrašo supratimo metodas
Sąrašo supratimas leidžia generuoti naują sąrašą vienoje kodo eilutėje. Vadinasi, kiekvienam esamo sąrašo nariui pritaikius išraišką.
Taikant šį metodą, dauginimas atliekamas pakartotinai kartojant kiekvieną matricos narį. Mes naudojame daugiasluoksnį sąrašo supratimą.
# 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]]
Privalumai
- Palyginti su map() funkcijos metodu, trumpesnis ir lengviau skaitomas.
Trūkumai
- Tai gali būti mažiau veiksminga nei naudojant funkciją map(), ypač didelėms matricoms.
- Tai sudėtingiau nei įdėtos kilpos metodas.
Išvada
Šiame įraše apžvelgėme NumPy naudojimo alternatyvas dauginant matricas Python. Atlikome matricos dauginimą įdėtose kilpose, įtaisytąją map() funkciją ir sąrašo supratimą.
Geriausia strategija priklausys nuo konkrečių jūsų projekto poreikių.
Kiekviena strategija turi savų privalumų ir trūkumų. Norint įsitikinti, kad funkcija veikia tinkamai, verta pridėti keletą bandomųjų atvejų su įvairiais matricos matmenimis ir reikšmėmis.
Taip pat turėtumėte įtraukti kai kuriuos našumo testus, kad palygintumėte, kaip šie metodai veikia.
Palikti atsakymą