Python-ohjelma moninkertaistaa kaksi matriisia

Sisällysluettelo

Tässä esimerkissä opitaan kertomaan matriisit kahdella eri tavalla: sisäkkäinen silmukka ja sisäkkäisten luetteloiden täydennys

Tämän esimerkin ymmärtämiseksi sinulla on oltava tieto seuraavista Python-ohjelmointiaiheista:

  • Python for Loop
  • Python-luettelo
  • Python-matriisit ja NumPy-taulukot

Pythonissa voimme toteuttaa matriisin sisäkkäisinä luetteloina (luettelo luettelon sisällä).

Voimme käsitellä kutakin elementtiä matriisin rivinä.

Esimerkiksi X = ((1, 2), (4, 5), (3, 6))edustaisi 3x2matriisia.

Ensimmäinen rivi voidaan valita muodossa X(0). Ensimmäisen rivin ensimmäisen sarakkeen elementti voidaan valita muodossa X(0)(0).

Kahden matriisin X ja Y kertolasku määritetään vain, jos sarakkeiden lukumäärä X: ssä on yhtä suuri kuin rivien Y lukumäärä.

Jos X on n x mmatriisi ja Y on m x lmatriisi, XY on määritelty ja sillä on ulottuvuus n x l(mutta YX: ää ei ole määritelty). Tässä on pari tapaa toteuttaa matriisikertoja Pythonissa.

Lähdekoodi: Matriisikertaus käyttämällä sisäkkäistä silmukkaa

# 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) 

Tuotos

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

Tässä ohjelmassa olemme käyttäneet sisäkkäisiä forsilmukoita iteroimaan jokaisen rivin ja sarakkeen läpi. Keräämme tulokseen tuotteiden summan.

Tämä tekniikka on yksinkertainen, mutta laskennallisesti kallis, kun kasvatamme matriisin järjestystä.

Suurempiin matriisitoimintoihin suosittelemme optimoituja ohjelmistopaketteja, kuten NumPy, joka on useita kertoja (1000 luokkaa) kertaa nopeampi kuin yllä oleva koodi.

Lähdekoodi: Matriisikertaus käyttämällä sisäkkäisten luetteloiden ymmärtämistä

# 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) 

Tämän ohjelman tulos on sama kuin edellä. Yllä olevan koodin ymmärtämiseksi meidän on ensin tiedettävä sisäänrakennetusta toiminnosta zip()ja argumenttiluettelon purkamisesta * -operaattorilla.

Olemme käyttäneet sisäkkäistä luetteloluetteloa iteroidaksemme matriisin jokaisen elementin. Koodi näyttää aluksi monimutkaiselta ja lukukelvottomalta. Mutta kun saat listan ymmärtämisen ripaan, et todennäköisesti palaa sisäkkäisiin silmukoihin.

Mielenkiintoisia artikkeleita...