Код умножения матрицы Python

Выполните умножение матриц на чистом Python без зависимостей. Запустите наше сравнение вложенных циклов и оптимизированных структур.

Попробуйте в редакторе

Обзор

Умножение матриц — фундаментальная математическая операция в линейной алгебре, компьютерной графике и машинном обучении. Он включает в себя взятие двух матриц и создание третьей путем вычисления скалярного произведения строк и столбцов.

Чтобы умножить матрицу A на матрицу B, количество столбцов в A должно равняться количеству строк в B. Полученная матрица имеет размеры строк A и столбцов B.

В чистом Python умножение матриц реализовано с помощью трех вложенных циклов. Эту операцию O(n³) легко написать, но она медленная, поэтому ученые, работающие с данными, используют в производстве специализированные библиотечные механизмы, такие какNumPy.

Код и вывод выполнения

Умножение матриц на чистом Python с использованием вложенных циклов и понимания списков.

def multiply_matrices(A, B):
    rows_A = len(A)
    cols_A = len(A[0])
    rows_B = len(B)
    cols_B = len(B[0])
    
    if cols_A != rows_B:
        raise ValueError("Cannot multiply: column size of A must match row size of B.")
        
    # Initialize result matrix with zeros
    result = [[0 for _ in range(cols_B)] for _ in range(rows_A)]
    
    # Iterate through rows of A
    for i in range(rows_A):
        # Iterate through columns of B
        for j in range(cols_B):
            # Iterate through rows of B (or columns of A)
            for k in range(cols_A):
                result[i][j] += A[i][k] * B[k][j]
                
    return result

# 2x3 Matrix A
matrix_A = [
    [1, 2, 3],
    [4, 5, 6]
]

# 3x2 Matrix B
matrix_B = [
    [7, 8],
    [9, 10],
    [11, 12]
]

print("Matrix A (2x3):", matrix_A)
print("Matrix B (3x2):", matrix_B)
res = multiply_matrices(matrix_A, matrix_B)
print("Product (2x2):", res)
Терминальный выход
Matrix A (2x3): [[1, 2, 3], [4, 5, 6]]
Matrix B (3x2): [[7, 8], [9, 10], [11, 12]]
Product (2x2): [[58, 64], [139, 154]]

Пошаговая реализация

  • Рендеринг математической графики и вращение координат.
  • Простые скалярные произведения слоя искусственной нейронной сети
  • Понимание алгоритмических структур и вложенных циклов

Часто задаваемые вопросы

ПочемуNumPyвыполняет умножение матриц намного быстрее?

NumPyнаписан на C и использует высокооптимизированные библиотеки BLAS/LAPACK. Он использует преимущества векторизации, оптимизации кэша ЦП и параллельного выполнения, чего не могут сделать стандартные циклы Python.

Что такое оператор @ в Python?

Начиная сPython 3.5, символ `@` был введен как специальный инфиксный оператор для умножения матриц, позволяющий запускать `A @ B` при использовании числовых массивов.

Связанные темы