NumPy — популярная библиотека Python, которая предлагает ряд мощных математических функций. Библиотека широко используется в количественных областях, таких как наука о данных, машинное обучение и глубокое обучение. Мы можем использовать NumPy для выполнения сложных математических вычислений, таких как умножение матриц.
Умножение матриц может помочь нам быстро приблизиться к очень сложным вычислениям. Он может помочь нам в теории сетей, линейных системах уравнений, моделировании населения и многом другом. В этом руководстве мы рассмотрим некоторые основные вычисления с умножением матриц NumPy.
Что такое NumPy?
NumPy — это библиотека Python с открытым исходным кодом, которую мы можем использовать для выполнения высокоуровневых математических операций с массивами, матрицами, линейной алгеброй, анализом Фурье и т. Д. Библиотека NumPy очень популярна в научных вычислениях, науках о данных и машинном обучении. NumPy совместим с популярными библиотеками данных, такими как pandas, matplotlib и Scikit-learn. Это намного быстрее, чем списки Python, потому что он объединяет более быстрые коды, такие как C и C ++, в Python. Он также разбивает наши задачи на несколько частей и обрабатывает каждую часть одновременно.
Установка и импорт NumPy
Прежде чем мы начнем, убедитесь, что у нас установлен NumPy. Если у вас уже есть Python, вы можете установить NumPy с помощью одной из следующих команд:
conda install numpy
или
pip install numpy
Чтобы импортировать NumPy в наш код Python, мы можем использовать следующую команду:
import numpy as np
Что такое матрица NumPy?
Матрица — это двумерный массив. Каждый элемент в массиве имеет два индекса. Давайте посмотрим на пример в NumPy:
import numpy as npA = [[6, 7],[8, 9]]print(np.array(A) [0,0])
В приведенном выше коде, мы имеем матрицу A [[6, 7], [8, 9]]. Мы запрашиваем элемент, указанный в (0,0), и наш результат возвращается 6. Когда мы хотим определить форму нашей матрицы, мы используем количество строк по количеству столбцов. Это означает, что матрица A имеет форму 2×2.
Теперь давайте взглянем на несколько различных методов умножения матриц 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 npA = 5B = [[6, 7],[8, 9]]print(np.dot(A,B))
Теперь давайте умножим двумерную матрицу на другую двумерную матрицу. При умножении двух матриц порядок имеет значение. Это означает, что матрица A, умноженная на матрицу B, не то же самое, что матрица B, умноженная на матрицу A.
Прежде чем мы начнем, давайте посмотрим на визуальное представление того, как выполняется умножение.
import numpy as npA = [[6, 7],[8, 9]]B = [[1, 3],[5, 7]]print(np.dot(A,B))print(«———-«)print(np.dot(B,A))
Примечание. Важно отметить, что мы можем перемножить две матрицы только в том случае, если количество столбцов в первой матрице равно количеству строк во второй матрице.
Матричный продукт с numpy.matmul
matmul()Функция дает нам матрицу произведение двух 2-й массивов. С помощью этого метода мы не можем использовать скалярные значения для нашего ввода. Если один из наших аргументов представляет собой одномерный массив, функция преобразует его в матрицу, добавляя 1 к его измерению. Он удаляется после завершения умножения.
Если один из наших аргументов больше 2-d, функция рассматривает его как стек матриц в последних двух индексах. Этот matmul()метод отлично подходит для случаев, когда мы не уверены в размерах наших матриц.
Давайте посмотрим на несколько примеров:
Умножение двумерного массива на другой двумерный массив
import numpy as npA = [[2, 4],[6, 8]]B = [[1, 3],[5, 7]]print(np.matmul(A,B))
Умножение двумерного массива на одномерный массив
import numpy as npA = [[5, 0],[0, 5]]B = [5, 2]print(np.matmul(A,B))
Один массив с размерами больше 2-х
import numpy as npA = np.arange(8).reshape(2, 2, 2)B = np.arange(4).reshape(2, 2)print(np.matmul(A,B))
Поэлементное умножение матриц с помощью numpy.multiply
numpy.multiply()Метод принимает две матрицы в качестве входных данных и выполняет поэлементное умножение на них. Поэлементное умножение, или произведение Адамара, умножает каждый элемент первой матрицы на эквивалентный элемент во второй матрице. При использовании этого метода обе матрицы должны иметь одинаковые размеры.
Давайте посмотрим на пример:
import numpy as npA = 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))
Мы можем передать в numpy.multiply()метод определенные строки, столбцы или подматрицы. Размеры строк, столбцов или подматриц, которые мы передаем в качестве наших операндов, должны быть одинаковыми. Давайте посмотрим на пример:
import numpy as npA = 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,:]))
Подведение итогов и следующие шаги
Поздравляем с вашими первыми шагами в умножении матриц NumPy! Это сложная, но важная часть линейной алгебры. Это помогает нам лучше понять различные аспекты науки о данных, машинного обучения, глубокого обучения и других распространенных областей. Еще многое предстоит узнать о NumPy и матрицах. Вот некоторые рекомендуемые темы для обсуждения:
- Транспонирование матрицы NumPy
- Массивы NumPy (ndarray)
- NumPy векторизация