Matrizeen biderketa oinarrizko eragiketa da aljebra linealean.
Oro har, aplikazio askotan erabiltzen dugu, hala nola, irudien prozesamenduan, ikaskuntza automatikoan eta beste hainbatetan. NumPy informatika zientifikorako Python pakete nabarmena da.
Hala ere, argitalpen honetan, Python-en matrizeen biderketa egiteko hainbat metodo aztertuko ditugu NumPy erabili gabe.
erabiliko dugu habiatutako begiztak, integratutako map() funtzioa eta zerrendaren ulermena.
Horrez gain, estrategia bakoitzaren onurak eta eragozpenak aztertuko ditugu, baita haietako bakoitza noiz aplikatu ere. Aljebra linealean berria bazara eta matrizeen biderketari buruz gehiago ikasi nahi baduzu; jarraitu irakurtzen.
Non erabiltzen dugu matrizearen biderketa?
Matrizeen biderketa erabiltzen da ordenagailu grafikoak 2D eta 3D bisualak aldatzeko. Adibidez, pantailako objektuak biratu, eskalatu eta itzul ditzakezu. Irudiak prozesatzeko matrizeak erabiltzen dira irudiak pixel-matrize gisa irudikatzeko. Gainera, matrizeak erabil daitezke irudien iragazketa bezalako eragiketak egiteko.
Matrizeak ere erabiltzen ditugu makina ikaskuntza. Datuak eta eredu-parametroak irudikatzen lagun diezagukete. Eragiketa ugari egin ditzakegu, hala nola, puntu produktuak eta produktu matrize-bektorialak kalkulatzea.
Ziur aski, operazio hau oso onuragarria da eragiketa zientifikoetan ere. Fisikan eta ingeniaritzan erabil dezakegu kantitate fisikoak deskribatzeko. Beraz, bektore eta tentsoreekin funtziona dezakegu.
Zergatik ez dugu aukeratu NumPy erabiltzea?
NumPy a den bitartean Python liburutegia, ez da beti aukera aproposa matrizea biderkatzeko. Baliteke NumPy erabiltzea erabakitzea, tamaina eta menpekotasuna, ikaskuntza eta sistema tradizionalak bezalako arrazoiengatik.
Python-en integratutako funtzioak erabiltzea edo kode pertsonalizatua garatzea eraginkorragoa izan daiteke kasu batzuetan. Funtsezkoa da ohartzea, hala ere, NumPy liburutegi sendoa dela. Gainera, matrizeen biderketarako ere erabil dezakezu.
Orain, ikus dezagun nola lor dezakegun matrizearen biderketa NumPy gabe.
Habiaratutako begiztak metodoa
Begizta habiaratuen teknikak begiztak habiaratuak erabiltzen ditu Python-en matrizeen biderketa exekutatzeko. Funtzioak iterazioa egiten du matrize-elementu bakoitzaren gainean. Eta biderkatzen ditu begizta habiaratu batzuen bidez. Funtzioak emaitza itzultzen du, matrize berri batean gordetzen dena.
Planteamendu hau erraza da ulertzea. Hala ere, baliteke beste modu batzuk bezain eraginkorra ez izatea, bereziki matrize handiagoentzat. Hala ere, aukera zoragarria da zuretzat aljebra linealean berria bazara.
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])
# Ezarri emaitza-matrizea zeroetan.
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
Dezagun adibide bat nola egin hau. Behean kode lerro hauek gehi ditzakezu adibide hau probatzeko.
# 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]]
Abantailak:
- Ulertzeko erraza.
- Bikaina hasiberrientzat edo matrizeen biderketaren ulermen sakonagoa bilatzen dutenentzat.
Desabantailak ditu:
- Ez dira teknika alternatiboak bezain eraginkorrak, bereziki matrize handiagoetarako.
- Ez da beste ikuspegi alternatiboak bezain irakurgarria.
map() funtzioaren metodoa
Map() funtzioaren metodoak Python-en matrizeen biderketa egiteko beste ikuspegi bat eskaintzen du. Planteamendu honetan, map() funtzio integratua erabiltzen dugu. Horregatik, elementu iterable bakoitzari (zerrenda, tupla, etab.) emandako funtzio bat aplikatzen duen programazio-tresna funtzional bat erabiltzen dugu. Gainera, map() funtzioak bi parametro onartzen ditu, funtzio bat eta iterable bat. Eta, elementu iterable bakoitzari funtzioa aplikatzen dion iteratzaile bat itzultzen du.
Planteamendu honetan, matrizeko kide bakoitza igaro eta biderketa egiten dugu habiaratuta map() funtzioa erabiliz.
zip() funtzioa matrizeetako elementu bakoitza paraleloan errepikatzeko erabiltzen da.
Azkenik, sum() funtzioa erabiltzen da emaitzak batzeko.
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
Orain, berriro ere, gure kodea probatu dezakegu adibide batekin.
# 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]]
Abantailak
- Pilatutako begiztak baino eraginkorragoa
- Programazio funtzionala erabiltzen du kodea errazago egiteko.
Desabantailak
- Programazio funtzionalarekin ezagutzen ez duten pertsona batzuk agian irakurgarri gutxiago izango dute.
- Begizta habiaratuen teknika baino gutxiago ulergarria da.
Zerrendak ulertzeko metodoa
Zerrenda ulertzeak zerrenda berri bat sortzeko aukera ematen dizu kode lerro bakarrean. Hori dela eta, lehendik dagoen zerrenda bateko kide bakoitzari adierazpen bat aplikatuz.
Planteamendu honetan, biderketa matrize-kide bakoitza behin eta berriz errepikatuz egiten da. Geruzatutako zerrendaren ulermena erabiltzen ari gara.
# 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]]
Abantailak
- Map() funtzioaren metodoarekin alderatuta, laburragoa eta irakurgarriagoa.
Desabantailak
- Map() funtzioa erabiltzea baino eraginkorragoa izan daiteke, bereziki matrize handietarako.
- Habiaraturiko begiztak hurbiltzea baino zailagoa da.
Ondorioa
Post honetan, Python-en matrizeak biderkatzean NumPy erabiltzeko alternatibak aztertu ditugu. Matrizeen biderketa egin dugu habiaratutako begiztetan, integratutako map() funtzioa eta zerrendaren ulermena.
Estrategia onena zure proiektuaren behar berezietan oinarrituko da.
Estrategia bakoitzak bere alde onak eta txarrak ditu. Funtzioak behar bezala funtzionatzen duela ziurtatzeko, komeni da matrizearen dimentsio eta balio ezberdinekin proba batzuk gehitzea.
Errendimendu-proba batzuk ere sartu beharko zenituzke metodo hauek nola exekutatzen diren alderatzeko.
Utzi erantzun bat