Питхон програм за множење две матрице

У овом примеру научићемо да множимо матрице на два различита начина: угнежђену петљу и, угнежђену ознаку листе

Да бисте разумели овај пример, требало би да имате знање о следећим Питхон програмским темама:

  • Питхон за Лооп
  • Питхон Лист
  • Питхон матрице и НумПи низови

У Питхону можемо применити матрицу као угнежђену листу (листу унутар листе).

Сваки елемент можемо третирати као ред матрице.

На пример X = ((1, 2), (4, 5), (3, 6)), представљао би 3x2матрицу.

Први ред се може одабрати као X(0). И, елемент у првом реду, првој колони може бити изабран као X(0)(0).

Множење две матрице Кс и И дефинисано је само ако је број колона у Кс једнак броју редова И.

Ако је Кс n x mматрица, а И m x lматрица, тада је КСИ дефинисан и има димензију n x l(али ИКС није дефинисан). Ево неколико начина за примену множења матрица у Питхону.

Изворни код: Множење матрице помоћу угнежђене петље

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

Оутпут

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

У овом програму користили смо угнежђене forпетље за прелазак кроз сваки ред и сваку колону. У резултату акумулирамо збир производа.

Ова техника је једноставна, али рачунски скупа јер повећавамо редослед матрице.

За веће операције са матрицом препоручујемо оптимизоване софтверске пакете попут НумПи-а који је неколико (у редоследу 1000) пута бржи од горе наведеног кода.

Изворни код: Множење матрице коришћењем разумевања угнежђених спискова

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

Резултат овог програма је исти као и горе. Да бисмо разумели горњи код, прво морамо знати о уграђеној функцији zip()и распакивању листе аргумената помоћу оператора *.

Користили смо разумевање угнежђене листе за итерирање кроз сваки елемент у матрици. Код у почетку изгледа сложено и нечитко. Али када једном закачите за разумевање листе, вероватно се нећете вратити у угнежђене петље.

Занимљиви Чланци...