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

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

Давайте начнем!

Мы рассмотрим:

  • Что такое NumPy?
  • Что такое матрица NumPy?
  • Методы умножения матриц NumPy
  • Подведение итогов и следующие шаги

Что такое NumPy?

NumPy - это библиотека Python с открытым исходным кодом, которую мы можем использовать для выполнения высокоуровневых математических операций с массивами, матрицами, линейной алгеброй, анализом Фурье и т. Д. Библиотека NumPy очень популярна в научных вычислениях, науках о данных и машинном обучении. NumPy совместим с популярными библиотеками науки о данных, такими как pandas, matplotlib и Scikit-learn. Он намного быстрее, чем списки Python, потому что он интегрирует более быстрые коды, такие как C и C ++, в Python. Он также разбивает наши задачи на несколько частей и обрабатывает каждую часть одновременно.

Установка и импорт NumPy

Прежде чем мы начнем, давайте убедимся, что у нас установлен NumPy. Если у вас уже есть Python, вы можете установить NumPy с помощью одной из следующих команд:

conda install numpy

or

pip install numpy

Чтобы импортировать NumPy в наш код Python, мы можем использовать следующую команду:

import numpy as np

Что такое матрица NumPy?

Матрица - это двумерный массив. Каждый элемент в массиве имеет два индекса. Давайте посмотрим на пример в NumPy:

import numpy as np

A = [[6, 7],
      [8, 9]]

print(np.array(A) [0,0])

=> 6

В приведенном выше коде у нас есть матрица A [[6, 7], [8, 9]]. Мы запрашиваем элемент, указанный в (0,0), и наш результат возвращает 6. Когда мы хотим определить форму нашей матрицы, мы используем количество строк по количеству столбцов. Это означает, что матрица A имеет форму 2x2.

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

Методы умножения матриц NumPy

Существует три основных способа выполнить умножение матрицы NumPy:

  • np.dot(array a, array b): возвращает скалярное произведение или скалярное произведение двух массивов.
  • np.matmul(array a, array b): возвращает матричное произведение двух массивов
  • np.multiply(array a, array b): возвращает поэлементное матричное умножение двух массивов

Давайте подробнее рассмотрим каждый из трех методов:

Скалярное умножение или скалярное произведение с numpy.dot

Скалярное умножение - это простая форма умножения матриц. Скаляр - это просто число, например 1, 2 или 3. При скалярном умножении мы умножаем скаляр на матрицу. Каждый элемент в матрице умножается на скаляр, в результате чего выходные данные имеют ту же форму, что и исходная матрица.

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

Давайте посмотрим на пример:

import numpy as np

A = 5

B = [[6, 7],
      [8, 9]]

print(np.dot(A,B))

=> [[30 35]
=>  [40 45]]

Теперь давайте умножим двумерную матрицу на другую двумерную матрицу. При умножении двух матриц порядок имеет значение. Это означает, что матрица A, умноженная на матрицу B, не то же самое, что матрица B, умноженная на матрицу A.

Прежде чем мы начнем, давайте посмотрим, как происходит умножение.

import numpy as np

A = [[6, 7],
      [8, 9]]

B = [[1, 3],
      [5, 7]]

print(np.dot(A,B))

print("----------")

print(np.dot(B,A))

=> [[41 67]
=>  [53 87]]
----------
=> [[30 34]
=>  [86 98]]

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

Матричный продукт с numpy.matmul

Функция matmul() дает нам матричное произведение двух двумерных массивов. С помощью этого метода мы не можем использовать скалярные значения для наших входных данных. Если один из наших аргументов является одномерным массивом, функция преобразует его в матрицу, добавляя 1 к его измерению. Он удаляется после завершения умножения.

Если один из наших аргументов больше 2-го, функция рассматривает его как стек матриц в последних двух индексах. matmul() метод отлично подходит для случаев, когда мы не уверены в размерах наших матриц.

Давайте посмотрим на несколько примеров:

Умножение двумерного массива на другой двумерный массив

import numpy as np

A = [[2, 4],
      [6, 8]]

B = [[1, 3],
      [5, 7]]

print(np.matmul(A,B))

=> [[22 34]
=>  [46 74]]

Умножение двумерного массива на одномерный массив

import numpy as np

A = [[5, 0],
      [0, 5]]

B = [5, 2]

print(np.matmul(A,B))

=> [25 10]

Один массив с размерами больше 2-го

import numpy as np

A = np.arange(8).reshape(2, 2, 2)

B = np.arange(4).reshape(2, 2)

print(np.matmul(A,B))

=> [[[ 2  3]
=>   [ 6 11]]

=>  [[10 19]
=>   [14 27]]]

Поэлементное умножение матриц с помощью numpy.multiply

Метод numpy.multiply() принимает две матрицы в качестве входных данных и выполняет над ними поэлементное умножение. Поэлементное умножение, или произведение Адамара, умножает каждый элемент первой матрицы на эквивалентный элемент во второй матрице. При использовании этого метода обе матрицы должны иметь одинаковые размеры.

Давайте посмотрим на пример:

import numpy as np

A = np.array([[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]])

B = np.array([[1, 2, 3, 4, 5], [5, 4, 3, 2, 1]])

print(np.multiply(A,B))

=> [[ 1  6 15 28 45]
=>  [10 16 18 16 10]]

Мы можем передать определенные строки, столбцы или подматрицы в метод numpy.multiply(). Размеры строк, столбцов или подматриц, которые мы передаем в качестве наших операндов, должны быть одинаковыми. Давайте посмотрим на пример:

import numpy as np

A = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])

B = np.array([[11, 12, 13, 14, 15], [16, 17, 18, 19, 20]])

print(np.multiply(A[ 0,:], B[ 1,: ]))

print("----------")

print(np.multiply(A[ 1,:], B[ 0,:]))

=> [ 16  34  54  76 100]
=> ----------
=> [ 66  84 104 126 150]

Подведение итогов и следующие шаги

Поздравляем с вашими первыми шагами в умножении матриц NumPy! Это сложная, но важная часть линейной алгебры. Это помогает нам лучше понять различные аспекты науки о данных, машинного обучения, глубокого обучения и других распространенных областей. Еще многое предстоит узнать о NumPy и матрицах. Вот некоторые рекомендуемые темы для обсуждения:

  • Транспонирование матрицы NumPy
  • Массивы NumPy (ndarray)
  • NumPy векторизация

Удачного обучения!

Больше контента на plainenglish.io