Алгоритм умножения матриц python

Транспонирование и умножение матриц на Python

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

Прежде чем писать программу транспонирования матрицы на Python, давайте сначала посмотрим на обзор транспонирования.

Транспонирование матрицы

Если вы заменяете строки матрицы столбцом той же матрицы, это называется транспонированием матрицы. Обозначается как X’. Например: Элемент в i-й строке и j-м столбце в X будет помещен в j-ю строку и i-й столбец в X’.

Пример: Предположим, мы взяли следующую матрицу A:

A = [[5, 4, 3] [2, 4, 6] [4, 7, 9] [8, 1, 3]]

At будет транспонированием указанной выше матрицы, т. е. A [i] [j] = At [j] [i], и поэтому At должно быть:

В = [5, 2, 4, 8] [4, 4, 7, 1] [3, 6, 9, 3]

Программа Python для транспонирования матрицы

Теперь мы напишем программу на Python для транспонирования входной заданной матрицы, где мы выполняем операцию, как мы выполнили в приведенном выше примере. Чтобы выполнить операцию транспонирования матрицы, мы будем использовать метод вложенного цикла for.

Давайте разберемся с использованием и реализацией этого метода на следующем примере.

# Define a matrix A A = [[5, 4, 3], [2, 4, 6], [4, 7, 9], [8, 1, 3]] # Define an empty matrix of reverse order transResult = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] # Use nested for loop on matrix A for a in range(len(A)): for b in range(len(A[0])): transResult[b][a] = A[a][b] # store transpose result on empty matrix # Printing result in the output print("The transpose of matrix A is: ") for res in transResult: print(res)
The transpose of matrix A is: [5, 2, 4, 8] [4, 4, 7, 1] [3, 6, 9, 3]

Умножение матриц

В этом разделе мы напишем программу на Python для умножения двух входных матриц и выведем результат на выходе. Эта программа укажет, как умножать две матрицы, имеющие определенные значения.

Прежде чем писать программу на Python, давайте сначала посмотрим на обзор умножения двух матриц.

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

При умножении двух матриц элементы строки первой матрицы умножаются на элементы столбца второй матрицы.

Пример: предположим, что мы взяли следующие две матрицы A и B:

A = [[5, 4, 3] [2, 4, 6] [4, 7, 9]] and, B = [[3, 2, 4] [4, 3, 6] [2, 7, 5]]

C будет объединением двух указанных выше матриц, т. е. C = A + B, и поэтому C должно быть:

C = [[37, 43, 59] [34, 58, 62] [58, 92, 103]]

Как мы видим, результирующая матрица C, также известная как произведение матриц, имеет то же количество строк, что и первая матрица (матрица A), и такое же количество столбцов, как и вторая матрица (матрица B). Мы также знаем этот тип умножения матриц как скалярное произведение матриц.

Читайте также:  Rfr dcnfdbnm ccskre d html

Умножение двух матриц

Теперь мы напишем программу Python для умножения двух матриц, где мы выполняем умножение, как мы это делали в приведенном выше примере. Мы можем использовать различные методы для написания такой программы на Python, но в этом руководстве будем использовать только следующие два метода:

  1. Использование метода вложенного цикла.
  2. Использование метода понимания вложенного списка.

В обоих методах мы напишем пример программы, чтобы понять их реализацию для умножения двух матриц.

Способ 1: Использование метода вложенного цикла

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

Давайте разберемся с реализацией этого метода на следующем примере.

# Define two matrix A and B in program A = [[5, 4, 3], [2, 4, 6], [4, 7, 9]] B = [[3, 2, 4], [4, 3, 6], [2, 7, 5]] # Define an empty matrix to store multiplication result multiResult = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] # Using nested for loop method on A & B matrix for m in range(len(A)): for n in range(len(B[0])): for o in range(len(B)): multiResult[m][n] += A[m][o] * B[o][n] # Storing multiplication result in empty matrix # Printing multiplication result in the output print("The multiplication result of matrix A and B is: ") for res in multiResult: print(res)
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]

Способ 2: Использование метода понимания вложенного списка

В этом методе мы будем использовать понимание вложенного списка, чтобы получить результат умножения двух входных матриц. При использовании в программе метода понимания списка мы также будем использовать «zip в Python» для вложенного списка. Давайте разберемся с реализацией этого метода на следующем примере.

# Define two matrix A & B in the program A = [[5, 4, 3], [2, 4, 6], [4, 7, 9]] B = [[3, 2, 4], [4, 3, 6], [2, 7, 5]] # Using nested list method with zip in Python multiResult = [[sum(a * b for a, b in zip(Arow, Bcol)) for Bcol in zip(*B)] for Arow in A] # Printing multiplication result in the output print("The multiplication result of matrix A and B is: ") for res in multiResult: print(res)
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]

Источник

Читайте также:  Вставляем background в css

Умножение матриц в Python без NumPy

Умножение матриц является фундаментальной операцией в линейной алгебре.

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

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

мы будем использовать вложенные циклы, встроенная функция map() и понимание списка.

Кроме того, мы рассмотрим преимущества и недостатки каждой стратегии, а также когда применять каждую из них. Если вы новичок в линейной алгебре и хотите узнать больше об умножении матриц; продолжайте читать.

Питон

Где мы используем умножение матриц?

Умножение матриц используется в компьютерная графика изменять 2D и 3D изображения. Например, вы можете вращать, масштабировать и перемещать объекты на экране. Матрицы используются при обработке изображений для представления изображений в виде массивов пикселей. Кроме того, матрицы могут использоваться для проведения таких операций, как фильтрация изображений.

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

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

Почему мы не можем использовать NumPy?

В то время как NumPy является Библиотека Python, это не всегда идеальный вариант для умножения матриц. Мы можем не использовать NumPy по таким причинам, как размер и зависимость, обучение и устаревшие системы.

В некоторых случаях использование встроенных функций Python или разработка собственного кода могут оказаться более эффективными. Однако важно отметить, что NumPy — мощная библиотека. Кроме того, вы также можете использовать его для умножения матриц.

Теперь давайте посмотрим, как мы можем добиться умножения матриц без NumPy.

Метод вложенных циклов

Техника вложенных циклов использует вложенные циклы для выполнения умножения матриц в Python. Функция перебирает каждый элемент матрицы. И он умножает их, используя серию вложенных циклов. Функция возвращает результат, который сохраняется в новой матрице.

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

def matrix_multiplication(A, B):

# Determine the matrices’ dimensions.

# Установить матрицу результатов в нули.

result = [[0 for row in range(cols_B)] for col in

# Iterate through rows of A

# Iterate through columns of B

Читайте также:  Python сохранить веса нейросети

# Iterate through rows of B

Давайте рассмотрим пример того, как это сделать. Вы можете просто добавить эти строки кода ниже, чтобы протестировать этот пример.

# Perform matrix multiplication

result = matrix_multiplication(A, B)

Метод вложенных циклов 1

Выгоды:
  • Легко понять.
  • Отлично подходит для новичков или тех, кто ищет более глубокое понимание матричного умножения.
Минусы:
  • Не так эффективен, как альтернативные методы, особенно для больших матриц.
  • Это не так читабельно, как альтернативные подходы.

Метод функции map()

Метод функции map() предоставляет альтернативный подход к умножению матриц в Python. В этом подходе мы используем встроенную функцию map(). Следовательно, мы используем инструмент функционального программирования, который применяет предоставленную функцию к каждому итерируемому элементу (списку, кортежу и т. д.). Кроме того, функция map() принимает два параметра: функцию и итерируемый объект. И он возвращает итератор, который применяет функцию к каждому итерируемому элементу.

В этом подходе мы просматриваем каждый элемент матрицы и выполняем умножение с помощью вложенной функции map().

Функция zip() используется для параллельного перебора каждого элемента матриц.

Наконец, функция sum() используется для суммирования результатов.

def matrix_multiplication(A, B):

# To get the dimensions of the matrices

# We use map() function for multiplication.

result = [[sum(a * b for a, b in zip(row_a, col_b)) for

col_b in zip(*B)] for row_a in A]

Теперь снова мы можем протестировать наш код на примере.

# Use map() function to perform matrix multiplication

result = list(map(lambda x: list(map(lambda y: sum(i*j

Преимущества
  • Более эффективен, чем метод сложенных циклов
  • Он использует функциональное программирование, чтобы сделать код проще.
Недостатки бонуса без депозита
  • Некоторым людям, не знакомым с функциональным программированием, это может показаться менее читаемым.
  • Это менее понятно, чем техника вложенных циклов.

Метод понимания списка

Понимание списков позволяет создать новый список в одной строке кода. Следовательно, это путем применения выражения к каждому члену существующего списка.

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

# Matrix multiplication using list comprehension

result = [[sum(A[i][k] * B[k][j] for k in range(len(A[0])))

for j in range(len(B[0]))] for i in range(len(A))]

Метод понимания списка 1

Преимущества
Недостатки бонуса без депозита
  • Это может быть менее эффективно, чем использование функции map(), особенно для больших матриц.
  • Это сложнее, чем подход с вложенными циклами.

Заключение

В этом посте мы рассмотрели альтернативы использованию NumPy при умножении матриц в Python. Мы выполнили умножение матриц во вложенных циклах, встроенной функции map() и анализе списка.

Лучшая стратегия будет зависеть от конкретных потребностей вашего проекта.

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

Вы также должны включить некоторые тесты производительности, чтобы сравнить, насколько хорошо эти методы работают.

Источник

Оцените статью