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

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

Щоб зрозуміти цей приклад, ви повинні знати наступні теми програмування на 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()та розпаковувати список аргументів за допомогою оператора *.

Ми використовували розуміння вкладеного списку для ітерації кожного елемента в матриці. Спочатку код виглядає складним і нечитабельним. Але як тільки ви докопаєтесь до розуміння списку, ви, мабуть, не повернетесь до вкладених циклів.

Цікаві статті...