Програма Python за умножаване на две матрици

В този пример ще се научим да умножаваме матрици, използвайки два различни начина: вложен цикъл и, вложен списък comprenhension

За да разберете този пример, трябва да имате познанията по следните теми за програмиране на Python:

  • Python за Loop
  • Списък на Python
  • Матрици на Python и масиви NumPy

В Python можем да реализираме матрица като вложен списък (списък в списък).

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

Например X = ((1, 2), (4, 5), (3, 6))ще представлява 3x2матрица.

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

Умножението на две матрици X и Y се дефинира само ако броят на колоните в X е равен на броя на редовете Y.

Ако X е n x mматрица и Y е m x lматрица, тогава XY се дефинира и има измерението n x l(но YX не е дефинирано). Ето няколко начина за внедряване на матрично умножение в Python.

Изходен код: Умножение на матрица с помощта на вложен цикъл

# 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цикли, за да прегледаме всеки ред и всяка колона. Натрупваме сумата от продукти в резултата.

Тази техника е проста, но изчислително скъпа, тъй като увеличаваме реда на матрицата.

За по-големи матрични операции препоръчваме оптимизирани софтуерни пакети като NumPy, който е няколко (в порядъка на 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()и разархивирането на списъка с аргументи, използвайки * оператор.

Използвахме разбиране на вложен списък, за да прегледаме всеки елемент в матрицата. Кодът изглежда сложен и нечетлив в началото. Но след като хванете разбирането на списъка, вероятно няма да се върнете към вложени цикли.

Интересни статии...