Matricas reizināšana ir lineārās algebras pamatdarbība.
Mēs to parasti izmantojam daudzās lietojumprogrammās, piemēram, attēlu apstrādē, mašīnmācībā un daudzās citās lietojumprogrammās. NumPy ir ievērojama Python pakotne zinātniskajai skaitļošanai.
Tomēr šajā ziņā mēs apskatīsim dažādas metodes matricas reizināšanai Python, neizmantojot NumPy.
Mēs izmantosim ligzdotas cilpas, iebūvēto map() funkciju un saraksta izpratni.
Turklāt mēs apskatīsim katras stratēģijas priekšrocības un trūkumus, kā arī to, kad katru no tām piemērot. Ja esat iesācējs lineārajā algebrā un vēlaties uzzināt vairāk par matricas reizināšanu; turpini lasīt.
Kur mēs izmantojam matricas reizināšanu?
Tiek izmantota matricas reizināšana datorgrafika lai mainītu 2D un 3D vizuālos attēlus. Piemēram, varat pagriezt, mērogot un tulkot objektus ekrānā. Matricas izmanto attēlu apstrādē, lai attēlotu attēlus kā pikseļu masīvus. Turklāt matricas var izmantot, lai veiktu tādas darbības kā attēlu filtrēšana.
Mēs izmantojam arī matricas mašīna mācīšanās. Tie var mums palīdzēt attēlot datus un modeļa parametrus. Mēs varam veikt daudzas darbības, piemēram, skaitļot punktu produktu un matricas vektoru produktus.
Protams, šī operācija ir ļoti izdevīga arī zinātniskās operācijās. Mēs to varam izmantot fizikā un inženierzinātnēs, lai aprakstītu fiziskos lielumus. Tādējādi mēs varam darboties ar vektoriem un tenzoriem.
Kāpēc mēs nevaram izvēlēties lietot NumPy?
Kamēr NumPy ir a Python bibliotēka, tas ne vienmēr ir ideāls variants matricas reizināšanai. Mēs varam neizvēlēties izmantot NumPy tādu iemeslu dēļ kā lielums un atkarība, mācīšanās un mantotās sistēmas.
Dažos gadījumos Python iebūvēto funkciju izmantošana vai pielāgota koda izstrāde var būt efektīvāka. Tomēr ir ļoti svarīgi atzīmēt, ka NumPy ir spēcīga bibliotēka. Turklāt jūs varat to izmantot arī matricas reizināšanai.
Tagad apskatīsim, kā mēs varam panākt matricas reizināšanu bez NumPy.
Ligzdoto cilpu metode
Ligzdoto cilpu tehnika izmanto ligzdotās cilpas, lai Python izpildītu matricas reizināšanu. Funkcija atkārtojas pa katru matricas elementu. Un tas tos reizina, izmantojot virkni ligzdotu cilpu. Funkcija atgriež rezultātu, kas tiek saglabāts jaunā matricā.
Šo pieeju ir viegli uztvert. Tomēr tas var nebūt tik efektīvs kā citi veidi, īpaši lielākām matricām. Tomēr tā ir lieliska izvēle, ja esat iesācējs lineārās algebras jomā.
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])
# Iestatiet rezultātu matricu uz nullēm.
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
Apskatīsim piemēru, kā to izdarīt. Varat vienkārši pievienot šīs koda rindiņas tālāk, lai pārbaudītu šo piemēru.
# 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]]
Pabalsti:
- Viegli uztverams.
- Lieliski piemērots iesācējiem vai tiem, kas vēlas dziļāk izprast matricas reizināšanu.
Trūkumi:
- Nav tik efektīvas kā alternatīvas metodes, īpaši lielākām matricām.
- Tas nav tik lasāms kā alternatīvas pieejas.
map() funkcijas metode
Funkcijas metode map() nodrošina alternatīvu pieeju matricas reizināšanai programmā Python. Šajā pieejā mēs izmantojam iebūvēto map() funkciju. Tādējādi mēs izmantojam funkcionālu programmēšanas rīku, kas katram iterējamam elementam (saraksta, kortedža utt.) piemēro sniegto funkciju. Arī funkcija map() pieņem divus parametrus, funkciju un atkārtojamu. Un tas atgriež iteratoru, kas piemēro funkciju katram iterējamam elementam.
Šajā pieejā mēs izejam cauri katram matricas loceklim un veicam reizināšanu, izmantojot ligzdoto karti () funkciju.
Funkcija zip() tiek izmantota, lai paralēli iterētu katru matricas elementu.
Visbeidzot, funkciju summa () izmanto, lai summētu rezultātus.
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
Tagad atkal mēs varam pārbaudīt savu kodu ar piemēru.
# 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]]
Priekšrocības
- Efektīvāka nekā stacked cilpas pieeja
- Tas izmanto funkcionālo programmēšanu, lai padarītu kodu vienkāršāku.
Trūkumi
- Dažiem cilvēkiem, kuri nav pazīstami ar funkcionālo programmēšanu, tā var šķist mazāk lasāma.
- Tas ir mazāk saprotams nekā ligzdoto cilpu tehnika.
Saraksta izpratnes metode
Saraksta izpratne ļauj ģenerēt jaunu sarakstu vienā koda rindā. Tādējādi katram esošā saraksta dalībniekam tiek piemērota izteiksme.
Šajā pieejā reizināšanu veic, atkārtoti atkārtojot katru matricas locekli. Mēs izmantojam slāņu saraksta izpratni.
# 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]]
Ieguvumi
- Salīdzinot ar map() funkcijas metodi, īsāks un lasāmāks.
Trūkumi
- Tas var būt mazāk efektīvs nekā funkcijas map() izmantošana, īpaši lielām matricām.
- Tas ir grūtāk nekā ligzdoto cilpu pieeja.
Secinājumi
Šajā ziņojumā mēs apskatījām alternatīvas NumPy izmantošanai, reizinot matricas programmā Python. Mēs veicām matricas reizināšanu ligzdotās cilpās, iebūvētajā funkcijā map() un saraksta izpratnē.
Labākā stratēģija būs atkarīga no jūsu projekta īpašajām vajadzībām.
Katrai no stratēģijām ir savi plusi un mīnusi. Lai pārliecinātos, ka funkcija darbojas pareizi, ieteicams pievienot dažus testa gadījumus ar dažādiem matricas izmēriem un vērtībām.
Ir jāiekļauj arī daži veiktspējas testi, lai salīdzinātu, cik labi šīs metodes darbojas.
Atstāj atbildi