English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Полное руководство по примерам 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
Пример # Программа умножение матриц с использованием списка понимания # 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() и использование оператора * для разборки списка параметров.