„Python“ programa dviem matricoms padauginti

Šiame pavyzdyje išmoksime dauginti matricas dviem skirtingais būdais: įdėta kilpa ir įdėto sąrašo sutraukimas

Norėdami suprasti šį pavyzdį, turite žinoti apie šias „Python“ programavimo temas:

  • „Python for Loop“
  • „Python“ sąrašas
  • „Python“ matricos ir „NumPy“ masyvai

„Python“ matricą galime įdiegti kaip įdėtą sąrašą (sąrašas sąraše).

Kiekvieną elementą galime traktuoti kaip matricos eilutę.

Pavyzdžiui, X = ((1, 2), (4, 5), (3, 6))būtų 3x2matrica.

Pirmąją eilutę galima pasirinkti kaip X(0). Pirmosios eilutės, pirmojo stulpelio elementą galima pasirinkti kaip X(0)(0).

Dviejų matricų X ir Y dauginimas apibrėžiamas tik tuo atveju, jei X stulpelių skaičius yra lygus Y eilučių skaičiui.

Jei X yra n x mmatrica, o Y yra m x lmatrica, XY yra apibrėžtas ir turi dimensiją n x l(bet YX nėra apibrėžtas). Štai keli būdai, kaip „Python“ įdiegti matricos dauginimą.

Šaltinio kodas: Matricos daugyba naudojant įdėtą kilpą

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

Rezultatas

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

Šioje programoje mes naudojome įdėtas forkilpas, kad pakartotume kiekvieną eilutę ir kiekvieną stulpelį. Rezultate kaupiame produktų sumą.

Ši technika yra paprasta, bet skaičiavimo požiūriu brangi, nes padidiname matricos tvarką.

Didesnėms matricos operacijoms rekomenduojame optimizuotus programinės įrangos paketus, pvz., „NumPy“, kuris yra kelis kartus (1000 eilės tvarka) greitesnis nei aukščiau pateiktas kodas.

Šaltinio kodas: Matricos daugyba naudojant įdėto sąrašo supratimą

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

Šios programos išvestis yra tokia pati kaip aukščiau. Norėdami suprasti aukščiau pateiktą kodą, pirmiausia turime žinoti apie įmontuotą funkciją zip()ir argumentų sąrašo išpakavimą naudojant * operatorių.

Mes naudojome įdėtą sąrašo supratimą, kad pakartotume kiekvieną matricos elementą. Iš pradžių kodas atrodo sudėtingas ir neįskaitomas. Bet kai jūs suprasite sąrašo supratimą, tikriausiai nebegrįšite į įdėtas kilpas.

Įdomios straipsniai...