Python program két mátrix szorzására

Tartalomjegyzék

Ebben a példában megtanuljuk a mátrixok szorzását kétféle módon: beágyazott hurok és beágyazott lista komplexitás

A példa megértéséhez ismernie kell a következő Python programozási témákat:

  • Python for Loop
  • Python lista
  • Python mátrixok és NumPy tömbök

A Pythonban megvalósíthatunk egy mátrixot beágyazott listaként (lista a listán belül).

Minden elemet a mátrix soraként kezelhetünk.

Például X = ((1, 2), (4, 5), (3, 6))egy 3x2mátrixot képviselne .

Az első sor kiválasztható X(0). És az elem az első sorban, az első oszlopban kiválasztható X(0)(0).

Két X és Y mátrix szorzata csak akkor definiálható, ha az X oszlopainak száma megegyezik az Y sorok számával.

Ha X n x mmátrix és Y m x lmátrix, akkor XY definiálva van, és rendelkezik dimenzióval n x l(de YX nincs meghatározva). Íme néhány módszer a mátrixszorzás Python-ban történő megvalósítására.

Forráskód: Matrix szorzás beágyazott hurok használatával

# Program to multiply two matrices using nested loops # 3x3 matrix X = ((12,7,3), (4 ,5,6), (7 ,8,9)) # 3x4 matrix Y = ((5,8,1,2), (6,7,3,0), (4,5,9,1)) # result is 3x4 result = ((0,0,0,0), (0,0,0,0), (0,0,0,0)) # iterate through rows of X for i in range(len(X)): # iterate through columns of Y for j in range(len(Y(0))): # iterate through rows of Y for k in range(len(Y)): result(i)(j) += X(i)(k) * Y(k)(j) for r in result: print(r) 

Kimenet

 (114, 160, 60, 27) (74., 97., 73., 14.) (119., 157., 112., 23.) 

Ebben a programban egymásba ágyazott forhurkokat használtunk az egyes sorok és oszlopok végigjátszásához. Az eredményben felhalmozzuk a termékek összegét.

Ez a technika egyszerű, de számítási szempontból drága, mivel növeljük a mátrix sorrendjét.

Nagyobb mátrix műveletekhez optimalizált szoftvercsomagokat javasolunk, mint például a NumPy, amely több (1000-es sorrendben) gyorsabb, mint a fenti kód.

Forráskód: Mátrix szorzás beágyazott lista megértésével

# Program to multiply two matrices using list comprehension # 3x3 matrix X = ((12,7,3), (4 ,5,6), (7 ,8,9)) # 3x4 matrix Y = ((5,8,1,2), (6,7,3,0), (4,5,9,1)) # result is 3x4 result = ((sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)) for X_row in X) for r in result: print(r) 

Ennek a programnak a kimenete megegyezik a fentiekkel. A fenti kód megértéséhez először tudnunk kell a beépített függvényről zip()és az * operátor használatával az argumentumlista kicsomagolásáról.

A beágyazott listamegértést alkalmaztuk a mátrix egyes elemeinek iterálásához. A kód elsőre bonyolultnak és olvashatatlannak tűnik. De ha egyszer megérted a listamegértéseket, valószínűleg nem fogsz visszatérni a beágyazott ciklusokra.

érdekes cikkek...