Fylkismargföldun er grundvallaraðgerð í línulegri algebru.
Við notum það almennt í fjölmörgum forritum eins og myndvinnslu, vélanámi og margt fleira. NumPy er athyglisverður Python pakki fyrir vísindalega tölvuvinnslu.
Hins vegar, í þessari færslu, munum við skoða ýmsar aðferðir til að gera fylkisföldun í Python án þess að nota NumPy.
Við munum nýta hreiður lykkjur, innbyggða map() aðgerðina og listaskilning.
Að auki munum við skoða kosti og galla hverrar stefnu, sem og hvenær á að beita hverri þeirra. Ef þú ert nýr í línulegri algebru og vilt læra meira um fylkismargföldun; haltu áfram að lesa.
Hvar notum við fylkismargföldun?
Matrix margföldun er notuð í tölvugrafík til að breyta 2D og 3D myndefni. Til dæmis er hægt að snúa, kvarða og þýða hluti á skjánum. Fylki eru notuð í myndvinnslu til að tákna myndir sem fylki pixla. Að auki er hægt að nota fylki til að framkvæma aðgerðir eins og myndasíun.
Við notum líka fylki í vél nám. Þeir geta hjálpað okkur að tákna gögn og líkanbreytur. Við getum framkvæmt fjölmargar aðgerðir, svo sem að reikna punktavörur og fylkisvektorvörur.
Vissulega er þessi aðgerð líka mjög hagstæð í vísindastarfsemi. Við getum notað það í eðlisfræði og verkfræði til að lýsa eðlisfræðilegum stærðum. Þess vegna getum við starfað með vektorum og tensorum.
Af hverju við getum ekki valið að nota NumPy?
Þó NumPy sé a Python bókasafn, það er ekki alltaf kjörinn valkostur fyrir fylkisföldun. Við gætum ekki valið að nota NumPy af ástæðum eins og stærð og ósjálfstæði, nám og eldri kerfi.
Það getur verið skilvirkara í sumum tilfellum að nota innbyggðu aðgerðir Python eða þróa sérsniðinn kóða. Það er hins vegar mikilvægt að hafa í huga að NumPy er sterkt bókasafn. Að auki geturðu líka notað það til fylkismargföldunar.
Nú skulum við kíkja á hvernig getum við náð fylkisföldun án NumPy.
Hreiður lykkjur aðferð
Hreiður lykkjutæknin notar hreiður lykkjur til að framkvæma fylkisföldun í Python. Fallið endurtekur sig yfir hvern fylkisþátt. Og það margfaldar þær með því að nota röð af hreiðri lykkjum. Fallið skilar niðurstöðunni sem er geymt í nýju fylki.
Þessi nálgun er auðskilin. Hins vegar gæti það ekki verið eins skilvirkt og aðrar leiðir, sérstaklega fyrir stærri fylki. Samt er það frábært val fyrir þig ef þú ert nýr í línulegri algebru.
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])
# Stilltu niðurstöðufylki á núll.
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
Við skulum hafa dæmi um hvernig á að gera þetta. Þú getur bara bætt við þessum kóðalínum hér að neðan til að prófa þetta dæmi.
# 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]]
Kostir:
- Auðvelt að skilja.
- Frábært fyrir nýliða eða þá sem leita að dýpri skilningi á fylkisföldun.
Ókostir:
- Ekki eins áhrifarík og önnur tækni, sérstaklega fyrir stærri fylki.
- Það er ekki eins læsilegt og aðrar aðferðir.
map() fallaðferð
Map() fallaðferðin býður upp á aðra nálgun til að gera fylkisföldun í Python. Í þessari nálgun notum við innbyggða map() aðgerðina. Þess vegna notum við hagnýtt forritunarverkfæri sem beitir tiltekinni aðgerð á hvern endurtekanlegan þátt (lista, tuple, osfrv.). Einnig tekur map() fallið við tveimur breytum, falli og endurtekinni. Og það skilar endurtekningu sem beitir fallinu á hvern endurtekanlegan þátt.
Í þessari nálgun förum við í gegnum hvern meðlim fylkisins og gerum margföldunina með því að nota Nested map() fallið.
Zip() fallið er notað til að fara í gegnum hvert frumefni fylkisins samhliða.
Að lokum er sum() fallið notað til að leggja saman niðurstöðurnar.
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ú, aftur, getum við prófað kóðann okkar með dæmi.
# 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]]
Kostir
- Áhrifaríkari en staflað lykkja nálgun
- Það notar hagnýta forritun til að gera kóðann einfaldari.
Ókostir
- Sumt fólk sem ekki kannast við hagnýta forritun gæti fundið það minna læsilegt.
- Það er minna skiljanlegt en hreiður lykkjur tækni.
Listaskilningsaðferð
Listaskilningur gerir þér kleift að búa til nýjan lista í einni kóðalínu. Þess vegna er þetta með því að beita tjáningu á hvern meðlim á núverandi lista.
Í þessari nálgun er margföldun framkvæmd með því að endurtaka ítrekað í gegnum hvern fylkishluta. Við notum lagskipt listaskilning.
# 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]]
Hagur
- Í samanburði við map() fallaðferðina, styttri og læsilegri.
Ókostir
- Það gæti verið minna árangursríkt en að nota map() aðgerðina, sérstaklega fyrir stór fylki.
- Það er erfiðara en hreiður lykkjur nálgast.
Niðurstaða
Í þessari færslu skoðuðum við valkosti við að nota NumPy við margföldun fylkja í Python. Við framkvæmdum fylkismarföldun í hreiðri lykkjum, innbyggðu map() fallinu og listaskilningi.
Besta stefnan mun treysta á sérstakar þarfir verkefnisins þíns.
Hver aðferðin hefur sína kosti og galla. Til að tryggja að aðgerðin virki rétt er góð hugmynd að bæta við nokkrum prófunartilfellum með ýmsum fylkisvíddum og gildum.
Þú ættir líka að láta nokkur frammistöðupróf fylgja með til að bera saman hversu vel þessar aðferðir virka.
Skildu eftir skilaboð