English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной курс Python

Контроль потока Python

Функции Python

Типы данных Python

Операции с файлами Python

Объекты и классы Python

Даты и время Python

Продвинутые знания Python

Референтное руководство Python

Python-программа умножает две матрицы

Полное руководство по примерам Python

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

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

В 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.

Исходный код: умножение матриц с использованием вложенных циклов

# Программа использует вложенные циклы для умножения матриц
# 3x3 matrix
# 3x3 матрица
    X = [[12,7,3],
    [4,5,6],
[7,8,9]]
# 3x4 матрица
    Y = [[5,8,1,2],
    [6,7,3,0],
[4,5,9,1]]
# 3x3 матрица
         result = [[0,0,0,0],
         [0,0,0,0],
[0,0,0,0]]
# Пробег по строкам X
   for i in range(len(X)):
   # Пробег по колонкам Y
       for j in range(len(Y[0])):
       # Пробег по строкам Y
           for k in range(len(Y)):
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:

result[i][j] += X[i][k] * Y[k][j]

Результат вывода
[114, 160, 60, 27]
[74, 97, 73, 14]

[119, 157, 112, 23]

В этой программе мы используем вложенные циклы for для遍ения по каждой строке и каждой колонке. Мы суммируем произведение.

Эта техника проста, но с увеличением порядка матрицы объем вычислений значительно увеличивается.Для больших матричных операций мы рекомендуем использовать оптимизированные пакеты, такие какNumPy

Это быстрее, чем вышеуказанный код в несколько раз (примерно в 1000 раз).

Пример
# Программа умножение матриц с использованием списка понимания
# 3x3 матрица
    X = [[12,7,3],
    [4,5,6],
[7,8,9]]
# 3x4 матрица
    Y = [[5,8,1,2],
    [6,7,3,0],
[4,5,9,1]]
# Результат 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() и использование оператора * для разборки списка параметров.

Полное руководство по примерам Python