У овом примеру научићемо да множимо матрице на два различита начина: угнежђену петљу и, угнежђену ознаку листе
Да бисте разумели овај пример, требало би да имате знање о следећим Питхон програмским темама:
- Питхон за Лооп
- Питхон Лист
- Питхон матрице и НумПи низови
У Питхону можемо применити матрицу као угнежђену листу (листу унутар листе).
Сваки елемент можемо третирати као ред матрице.
На пример 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()
и распакивању листе аргумената помоћу оператора *.
Користили смо разумевање угнежђене листе за итерирање кроз сваки елемент у матрици. Код у почетку изгледа сложено и нечитко. Али када једном закачите за разумевање листе, вероватно се нећете вратити у угнежђене петље.