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

Содержание

В этом примере мы научимся умножать матрицы двумя разными способами: вложенным циклом и вложенным списком.

Чтобы понять этот пример, вы должны знать следующие темы программирования Python:

  • Python для цикла
  • Список 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()и распаковке списка аргументов с помощью оператора *.

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

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