Matrica multipliko estas fundamenta operacio en lineara algebro.
Ni ĝenerale uzas ĝin en multaj aplikoj kiel bildprilaborado, maŝinlernado, kaj multaj pli. NumPy estas rimarkinda Python-pakaĵo por scienca komputiko.
Tamen, en ĉi tiu afiŝo, ni rigardos diversajn metodojn por fari matrican multiplikon en Python sen uzi NumPy.
Ni uzos nestitaj bukloj, la enkonstruita map() funkcio, kaj listkompreno.
Krome, ni rigardos la avantaĝojn kaj malavantaĝojn de ĉiu strategio, kaj ankaŭ kiam apliki ĉiun el ili. Se vi estas nova al lineara algebro kaj volas lerni pli pri matrica multipliko; daŭre legu.
Kie Ni Uzas Matrica Multipliko?
Matrica multipliko estas uzata en komputilaj grafikoj por ŝanĝi 2D kaj 3D-vidaĵojn. Ekzemple, vi povas turni, skali kaj traduki objektojn sur la ekrano. Matricoj estas uzitaj en bildprilaborado por reprezenti bildojn kiel tabeloj de pikseloj. Krome, matricoj povas esti uzataj por fari operaciojn kiel bildfiltrado.
Ni ankaŭ uzas matricojn en maŝinlernado. Ili povas helpi nin reprezenti datumojn kaj modelajn parametrojn. Ni povas fari multajn operaciojn, kiel komputi punktoproduktojn kaj matric-vektorajn produktojn.
Verŝajne, ĉi tiu operacio estas ankaŭ tre avantaĝa en sciencaj operacioj. Ni povas uzi ĝin en fiziko kaj inĝenierado por priskribi fizikajn kvantojn. Tial, ni povas funkcii per vektoroj kaj tensoro.
Kial Ni Eble Ne Elektas Uzi NumPy?
Dum NumPy estas a Biblioteko Python, ĝi ne ĉiam estas la ideala elekto por matrica multipliko. Ni eble ne elektas uzi NumPy pro kialoj kiel grandeco kaj dependeco, lernado kaj heredaj sistemoj.
Uzi la enkonstruitajn funkciojn de Python aŭ disvolvi kutiman kodon povas esti pli efika en iuj okazoj. Estas grave rimarki, tamen, ke NumPy estas forta biblioteko. Krome, vi ankaŭ povas uzi ĝin por matrica multipliko.
Nun, ni rigardu kiel ni povas atingi matrican multiplikon sen NumPy.
Metodo de nestitaj bukloj
La nestitaj bukloj-tekniko uzas nestitajn buklojn por efektivigi matrica multipliko en Python. La funkcio ripetas super ĉiu matrica elemento. Kaj, ĝi multobligas ilin uzante serion de nestitaj bukloj. La funkcio resendas la rezulton, kiu estas konservita en nova matrico.
Ĉi tiu aliro estas facile komprenebla. Tamen, ĝi eble ne estas tiel efika kiel aliaj manieroj, precipe por pli grandaj matricoj. Tamen, ĝi estas mirinda elekto por vi se vi estas nova al lineara algebro.
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])
# Agordu la rezultan matricon al nuloj.
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
Ni havu ekzemplon pri kiel fari tion. Vi povas simple aldoni ĉi tiujn liniojn de kodo sube por testi ĉi tiun ekzemplon.
# 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]]
profitoj:
- Facila komprenebla.
- Bonega por novuloj aŭ tiuj serĉantaj pli profundan komprenon de matrica multipliko.
malavantaĝoj:
- Ne same efika kiel alternativaj teknikoj, precipe por pli grandaj matricoj.
- Ĝi ne estas tiel legebla kiel alternaj aliroj.
map() funkcia metodo
La funkcio-metodo map() disponigas alternativan aliron por fari matrica multipliko en Python. En ĉi tiu aliro, ni uzas la enkonstruitan map() funkcion. Tial ni uzas funkcian programan ilon, kiu aplikas provizitan funkcion al ĉiu ripetebla elemento (listo, opo, ktp.). Ankaŭ, La funkcio map() akceptas du parametrojn, funkcion kaj iteblan. Kaj, ĝi resendas iteratoron kiu aplikas la funkcion al ĉiu ripetebla elemento.
En ĉi tiu aliro, ni ekzamenas ĉiun membron de la matrico kaj faras la multiplikon uzante la nestitan map() funkcion.
La funkcio zip() estas uzata por ripeti ĉiun elementon de la matricoj paralele.
Fine, la funkcio sum() estas uzata por aldoni la rezultojn.
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
Nun, denove, ni povas testi nian kodon kun ekzemplo.
# 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]]
Avantaĝoj
- Pli efika ol la stakitaj bukloj alproksimiĝas
- Ĝi uzas funkcian programadon por simpligi la kodon.
malavantaĝoj
- Iuj homoj, kiuj ne konas funkcian programadon, eble trovos ĝin malpli legebla.
- Ĝi estas malpli komprenebla ol la tekniko de nestitaj bukloj.
Lista komprenmetodo
Listo-kompreno ebligas al vi generi novan liston en ununura linio de kodo. Tial, ĉi tio estas aplikante esprimon al ĉiu membro de ekzistanta listo.
En ĉi tiu aliro, multipliko estas farita per plurfoje ripetado tra ĉiu matrica membro. Ni uzas tavoligitan listkomprenon.
# 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]]
profitoj
- Kompare kun la funkcio map() metodo, pli mallonga kaj pli legebla.
malavantaĝoj
- Ĝi povas esti malpli efika ol uzi la map() funkcion, precipe por grandaj matricoj.
- Ĝi estas pli malfacila ol la nestitaj bukloj alproksimiĝas.
konkludo
En ĉi tiu afiŝo, ni rigardis alternativojn al uzado de NumPy dum multiplikado de matricoj en Python. Ni faris matrican multiplikon en nestitaj bukloj, la enkonstruitan map() funkcion, kaj listkomprenon.
La plej bona strategio dependos de la apartaj bezonoj de via projekto.
Ĉiu el la strategioj havas proprajn avantaĝojn kaj malavantaĝojn. Por certigi, ke la funkcio funkcias ĝuste, estas bona ideo aldoni kelkajn provojn kun diversaj matricaj dimensioj kaj valoroj.
Vi ankaŭ devus inkluzivi kelkajn elfarajn testojn por kompari kiom bone ĉi tiuj metodoj efektivigas.
Lasi Respondon