Создаём матрицу в Python: пошаговая инструкция
Табличные данные очень удобны при работе с информацией. Поэтому часто используются в программировании, только называются иначе – матрицы. В этой статье мы расскажем, как создать матрицы в Python и выполнять с ними основные действия.
Что такое матрица в Python
Начнём с определений, так как базовое понимание матриц важно для любого программиста, который хочет научиться эффективно использовать Python.
Матрица — это просто массив или список чисел, символов, строк или объектов, расположенных в строках и столбцах. Она может использоваться для хранения данных, представления взаимосвязей между переменными и создания математических уравнений.
Состоит этот объект программирования из двух осей — оси x и оси y, которые нумеруются от нуля (0) до n, где n — длина каждой из осей. Обычно они представляются в виде строк и столбцов.
Выглядит матрица так.
Каждое число, указанное выше, представляет собой элемент матрицы, а каждая строка – один массив элементов с тремя элементами в строке. Важно отметить, что в каждой строке не обязательно отсортированы все её элементы. Изменение любого отдельного элемента влияет на всю матрицу.
Матрицы чрезвычайно полезны при выполнении таких задач, как операции линейной алгебры. Они позволяют быстро и эффективно манипулировать большими объёмами данных без необходимости каждый раз записывать специальные инструкции для каждой операции. Кроме того, матрицы могут использоваться для представления изображений – прежде чем обрабатывать изображение, его необходимо представить в числовом виде.
Способы создать матрицу в Python
Существует несколько способов создания матриц, мы рассмотрим два наиболее распространенных метода для Python.
Основной способ построения матриц в Python использует вложенные списки, каждый из которых соответствует строке. Такой способ актуален для нестандартных манипуляций, когда вы сами создаёте методы.
Допустим, нам нужно сделать квадратную матрицу, выглядеть это будет так.
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- Через библиотеку NumPy.
В этой библиотеке есть класс Array, который позволяет создавать массивы любого размера и затем манипулировать ими таким образом, чтобы они соответствовали требуемому формату матрицы. Этот способ подходит для стандартных математических операций с матрицами, так как они уже представлены в библиотеке.
Код выглядит так.
import numpy as np
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
Матричные операции
Рассмотрим основные манипуляции с матрицами в Python, на каждой мы остановимся подробно.
Сложение матриц считается одной из основных операций линейной алгебры. Она используется для нахождения суммы двух матриц или их разности. Чтобы сложить две матрицы, они должны быть одинакового размера и формы, то есть иметь одинаковое количество строк и столбцов.
При сложении двух матриц каждый элемент одной матрицы должен быть добавлен к соответствующему элементу другой матрицы. Для этого достаточно сложить каждую соответствующую пару элементов, чтобы получить их сумму.
Ниже пример сложения с помощью списков.
Теперь рассмотрим ту же операцию с помощью библиотеки NumPy и метода add().
Сложение и вычитание матриц может быть полезным инструментом при работе со сложными математическими уравнениями или операциями с несколькими переменными. Важно помнить, что перед выполнением операции сложения или вычитания обе матрицы должны иметь одинаковый размер и форму. Зная эти правила, вы сможете быстро складывать и вычитать любое количество матриц!
- Добавление двух матриц
Для добавления нам нужен вложенный цикл for.
Итак, у нас было две матрицы размером 3х3. Затем мы инициализировали ещё одну, в которой будет находиться равнодействующая матрица.
Результат будет выглядеть так.
The sum of Matrix M1 and M2 = [[17, 29, 38], [20, 22, -1], [4, 6, 28]]
- Умножение двух матриц
Умножение выполняется по принципу добавления, только используется оператор *.
Результат будет таким.
The sum of Matrix mat1 and mat2 = [[70, 208, -264], [99, 40, -12], [-5, 9, 27]]
- Транспонирование матрицы
Транспонирование матрицы — это просто тот же массив, в котором поменяны местами строки и столбцы. Это означает, что все элементы первой строки становятся элементами первого столбца, все элементы второй строки — элементами второго столбца и так далее.
Такой приём может быть использован для различных целей, например, для решения систем уравнений или нахождения обратной матрицы. Он также актуален для упрощения некоторых видов вычислений путем изменения порядка или расположения членов в уравнении или выражении.
Рассмотрим простой пример.
На выходе мы получим такие значения.
Транспонирование матрицы с помощью списка упрощает код, то есть строк станет меньше. Результат при этом не изменится.
- Нахождение обратной матрицы
Обратная матрица является результатом применения математической операции, называемой инверсией, к другой квадратной матрице. Инверсия — это процесс нахождения мультипликативной обратной величины, или взаимно-обратной, для каждого элемента данной квадратной матрицы.
Инверсная матрица может быть использована для решения систем уравнений, поскольку позволяет найти решение путем умножения обеих сторон на ее обратную величину. Это означает, что если известна одна сторона уравнения, то с помощью обратной матрицы можно найти другую сторону и таким образом решить все неизвестные в системе.
Обратные матрицы не всегда легко вычислить вручную, поэтому важно хорошо понимать принцип их работы, прежде чем приступать к самостоятельным вычислениям. К счастью, существует множество онлайн инструментов для работы с матрицами, мы применим метод inv() из библиотеки NumPy.
На выходе получим такие значения.
Если обратную матрицу найти невозможно, вы получите такое сообщение.
LinAlgError: Singular matrix.
Метод det() помогает узнать, возможно ли найти обратную матрицу. Когда determinant равен нулю, её не существует. Посмотрим на примере.
Как оптимизировать операции с матрицами
Выбор хостинга может существенно повлиять на производительность вашего кода.
Например, облачный хостинг обеспечивает масштабируемость и гибкость, позволяя пользователям легко увеличивать или уменьшать масштабы по мере необходимости. Это делает его идеальным для проектов, требующих больших вычислительных мощностей, или в случае необходимости быстро перестраивать свои ресурсы в зависимости от потребностей. Кроме того, провайдеры часто предоставляют дополнительные возможности, такие как автоматическое резервное копирование и поддержка нескольких языков.
Однако облачный хостинг имеет и некоторые недостатки, когда речь идет о матричных операциях в Python. Поскольку эти операции требуют больших вычислительных затрат, их выполнение на виртуальных машинах может быть медленным из-за ограниченности ресурсов и высоких задержек, связанных с доступом к данным с удаленных серверов.
Другим вариантом является хостинг выделенных серверов, который обеспечивает больший контроль над ресурсами. Выделенные серверы, как правило, дороже, чем общие хостинги, но обеспечивают более высокую производительность при решении интенсивных задач, таких как матричные операции в Python, благодаря выделенным аппаратным ресурсам и низкой задержке соединения между машинами, расположенными в одном физическом месте или центре обработки данных.
Сейчас возможен перенос сайта в RU-CENTER за 1 рубль https://www.nic.ru/info/master-transfer/.
Подведём итоги
Матрица в Python — это эффективный способ организации числовой информации с помощью двумерных массивов. Они достаточно эффективны для быстрого манипулирования большими массивами данных, что делает их популярными среди разработчиков, которые хотят с относительной легкостью обрабатывать сложные задачи манипулирования изображениями и задачи линейной алгебры.
Мы рассмотрели способы создания матриц и выполнения операций с ними. Надеемся, представленные инструкции будут вам полезны.
Знакомство с матрицами
Разработчики нейросетей говорят, что все нейросети — это просто бесконечное перемножение матриц. Мы решили разобраться, что это за матрицы и как их перемножать, а для этого пришлось полезть в линейную алгебру. И это оказалось не так сложно, как мы думали:
- Вектор — это просто группа из нескольких чисел, выстроенных в определённой последовательности. Например, рост и вес человека можно представить как вектор (172, 80). Ничего сложного.
- У вектора может быть внутри сколько угодно чисел. Главное — чтобы мы договорились, что для нас значат эти числа, и не меняли их местами просто так, произвольно.
- Векторы можно складывать, вычитать, умножать. Это чуть сложнее, чем с обычными числами.
- У вектора есть понятие линейной зависимости. Грубо говоря — параллельны друг другу векторы или нет. От этого зависит, какие операции можно делать с этими векторами.
Вектор — это «кирпичик» линейной алгебры. На его основе мы переходим к понятию матрицы.
Что такое матрица
Если вектор — это строка с числами в определённом порядке, то матрица — это таблица с числами в определённом порядке. Как у любой таблицы, у матрицы есть столбцы и строки. В них сидят какие-то числа. Всё вместе — это математический объект, то есть в каких-то случаях всю эту таблицу можно рассматривать как единое целое и совершать с ним операции.
Матрицы принято обозначать большими буквами латинского алфавита вроде А, В, С, D и так далее.
Числа внутри матрицы называют элементами. Каждый элемент обозначается двумя цифрами: первая цифра указывает на строку, а вторая — на столбец. Это адрес числа внутри матрицы. Например, элемент А₂₃ означает, что нужное число находится во второй строке и третьем столбце. Нумерация элементов нужна для записи формул и устного объяснения того, где находится нужное число в матрице.
В матрице может находиться неограниченное количество строк, столбцов и элементов. Из-за этого матрицы бывают разных видов и могут обладать разными особенностями. Например, если в матрице совпадает число строк и столбцов, то такая матрица называется квадратной.
В этой статье и в следующих материалах мы будем рассматривать разные виды матрицы и постепенно изучим их особенности.
Простые операции с матрицами
Вынесение минуса за пределы матрицы. Если внутри матрицы у большинства элементов знак минус, то часто это мешает расчётам или приводит к ошибкам. Чтобы этого избежать, от минуса избавляются. Для этого нужно вынести минус за пределы матрицы и изменить знак всех элементов внутри самой матрицы.
И наоборот: если внутри матрицы у большинства элементов знак минус и перед матрицей стоит минус, то минус можно внести в матрицу.
Умножение матрицы на число. Для умножения матрицы на число достаточно каждый элемент матрицы умножить на это число.
Транспонирование матрицы. Это операция, которая позже нам понадобится для решения матричных уравнений. Для транспонирования мы берём известную матрицу, меняем в ней местами строки со столбцами и получаем новую матрицу. Как бы поставили матрицу набок.
⚠️ При этом в матрице запрещено в произвольном порядке менять элементы. Зато можно полностью менять местами строки или столбцы. Если мы поменяем местами первую и вторую строку, то это останется прежняя матрица.
Сложение и вычитание матриц
Если в нескольких матрицах совпадает число строк и столбцов, то мы можем их складывать и вычитать. Для вычислений нам нужно поэлементно сложить или вычесть каждый элемент матриц: первый элемент первой матрицы складываем с первым элементом второй матрицы или вычитаем из него и так далее. В результате получаем новую матрицу.
Умножение матриц
Матрицы умножаются по принципу строка на столбец. Мы умножаем первую строку первой матрицы, на первый столбец второй матрицы, складываем результаты и получаем первый элемент новой матрицы. По аналогичной схеме вычисляем все остальные элементы. Звучит запутанно, поэтому идём по шагам:
Пошаговое умножение матрицы
- У нас есть две матрицы A и B. Их нужно перемножить, чтобы получить новую матрицу C.
- Размер матрицы A два на два: есть две строки и два столбца. Первая строка состоит из элементов А₁₁ и А₁₂; вторая — А₂₁ и А₂₂.
- У матрицы B такая же размерность: есть две строки и два столбца. Первая строка состоит из элементов B₁₁ и B₁₂; вторая — B₂₁ и B₂₂.
- У нас две одинаковые по размеру матрицы с двумя строками и столбцами. Это значит, что и матрица C будет размером два на два. Первая строка будет состоять из элементов C₁₁ и C₁₂; вторая — C₂₁ и C₂₂.
- Считаем элемент C₁₁. Умножаем первый элемент первой строки матрицы А (А₁₁) на первый элемент первого столбика матрицы B (B₁₁). Это первая часть, после которой ставим знак плюс. Вторая часть: умножаем второй элемент первой строчки матрицы А (А₁₂) на второй элемент первого столбика матрицы B (B₂₁). Складываем обе части и получаем первый элемент первой строки матрицы С (C₁₁).
- Считаем элемент C₁₂. Умножаем первый элемент первой строки матрицы А (А₁₁) на первый элемент второго столбика матрицы B (B₁₂). Это первая часть. Вторая часть: умножаем второй элемент первой строчки матрицы А (А₁₂) на второй элемент второго столбика матрицы B (B₂₂). Складываем части и получаем второй элемент первой строки матрицы С (C₁₂).
- Считаем элемент C₂₁. Умножаем первый элемент второй строки матрицы А (А₂₁) на первый элемент первого столбика матрицы B (B₁₁). Это первая часть. Вторая часть: умножаем второй элемент второй строки матрицы А (А₂₂) на второй элемент первого столбика матрицы B (B₂₁). Складываем части и получаем первый элемент второй строки матрицы С (C₂₁).
- Считаем элемент C₂₂. Умножаем первый элемент второй строки матрицы А (А₂₁) на первый элемент второго столбика матрицы B (B₁₂). Это первая часть. Вторая часть: умножаем второй элемент второй строки матрицы А (А₂₂) на второй элемент второго столбика матрицы B (B₂₂). Складываем части и получаем второй элемент второй строки матрицы С (C₂₂).
Если нам нужно найти матрицу в квадрате, то мы умножаем эту матрицу на саму себя. Если нужна матрица в кубе — умножаем её на саму себя три раза и так далее в зависимости от количества степеней. Если в одной из матриц все элементы нули, то она считается нулевой и после умножения на другую матрицу даёт нулевую матрицу — это как нуль умноженный на число всегда даёт нуль.
Что дальше
В следующий раз продолжим знакомиться с базовыми понятиями, которые нам понадобятся для решения матричных уравнений. А на сегодня Нео свободен
Что такое матрица в программировании
Матрица представляет собой прямоугольную таблицу элементов, в качестве которых могут выступать числа, функции, символы, слова и так далее — при условии, что заданы определенные правила математических действий с этими элементами.
Примеры матриц:
, .
Матричный элемент, расположенный на пересечении i-ой строки и j-го столбца, записывается в виде ai j , а выражение A = || ai j || означает, что матрица A составлена из элементов ai j :
.
Матричная алгебра имеет обширные применения в различных отраслях знания – в математике, физике, информатике, экономике. Например, матрицы используется для решения систем алгебраических и дифференциальных уравнений, нахождения значений физических величин в квантовой теории, шифрования сообщений в Интернете.
Матрица обозначается одной из заглавных букв латинского алфавита, а набор ее элементов помещается в круглые скобки:
(1) |
Представленная формулой (1) матрица A имеет m строк и n столбцов и называется m×n матрицей (“эм на эн матрицей”) или матрицей размера m×n. Строки матрицы нумеруются сверху вниз, а столбцы – слева направо.
Рис. 1. Порядок нумерации строк и столбцов матрицы.
Матричный элемент, расположенный на пересечении i-ой строки и j-го столбца, называется i,j-м элементом и записывается в виде ai j , а выражение A = || ai j || означает, что матрица A составлена из элементов ai j .
Матрица размера 1×n называется строчной или вектор-строкой.
Матрица размера n×1 называется столбцевой или вектор-столбцом. Для краткости вектор-строку и вектор-столбец обычно называют просто векторами.
Особую роль играют матрицы, у которых число строк совпадает с числом столбцов, то есть матрицы размера n×n. Такие матрицы называются квадратными При ссылке на квадратную матрицу достаточно указать ее порядок. Например, матрица третьего порядка имеет размер 3×3.
Квадратная матрица порядка 1 отождествляется с единственным ее элементом.
Матрицы. Понятие. Применение
Матрица – это набор чисел, записываемый в виде прямоугольной таблицы. Строки и столбцы матрицы можно считать векторами. Матрицы, у которых число строк равно числу столбцов, называют квадратными. Существует особая квадратная матрица I (Identity) – единичная. Она характеризуется тем, что ее диагональные элементы равны единице, а остальные — нулю: $$I_ = 1, i = j
\\
I_ = 0, i \neq j$$ В 3D-графике, матрицы используются для преобразования координат из одной системы координат в другую. Вообще, для преобразования базиса (базис — набор векторов, задающих координатные оси) в трехмерном пространстве вполне хватает матрицы 3х3, однако, для целей 3D-графики этого не всегда достаточно. В частности, перспективное проецирование удобно представить матрицей, но для этого необходима матрица 4х4. Также с этой целью вводятся т.н. однородные координаты, где трехмерной точке (x, y, z) соответствует набор четырех координат (xw, yw, zw, w).
Основные операции
Из операций, определенных над матрицами, мы рассмотрим умножение, транспонирование и, частично, обращение.
Умножение матриц
Определяется произведение матриц так:
Если Aij — элемент матрицы A, стоящий в i-ой строке и j-ом столбце, и C = AB, то $$C_ = \sum_A_ \cdot B_$$ т.е. элементы матрицы C получаются как скалярные произведения строк A на столбцы B. Отсюда видно, что при умножении матриц, необходимо, чтобы в первом сомножителе было столько же столбцов, сколько строк во втором.
Кое-кому также очевидно, что если существует произведение AB, то это еще не означает существования BA, не говоря уже об их равенстве.
В общем, $$AB \neq BA$$, т.е. произведение матриц не коммутативно. Зато оно ассоциативно. Проще говоря:
$$(AB)С = A(BC)$$ Умножение любой матрицы на единичную, дает исходную:
$$AI = A$$
Транспонирование матриц
Транспонирование обозначается как AT и возможно только для квадратных матриц. Если $$B=A^T$$, то
$$B_ = B_$$
Иными словами, строки и столбцы меняются местами.
Обращение
Обратная к A матрица обозначается как $$A^<-1>$$ и характеризуется тем, что при умножении A на нее, получается единичная матрица:
$$AA^ <-1>= I$$ Существует обратная к данной матрица далеко не всегда и процесс её нахождения далеко не тривиален. Однако, в 3D графике, напомню, матрицы используются для задания преобразований системы координат (базиса). Базис, заданный тремя взаимно перпендикулярными векторами единичной длины, называется ортонормированным. А у матрицы, задающей преобразование из одного ортонормированного базиса в другой, обратная матрица совпадает с транспонированной:
$$A^ <-1>= A^T$$ Матрицы, обладающие этим свойством, называются ортогональными.
В 3D-графике матрицы поворота ортогональны и их произведение тоже.-1>
Применение матриц
Выше уже было сказано, что в 3D-графике матрицы используются для преобразования координат. С этой целью точка умножается (как однострочная матрица) на соответствующую матрицу преобразования. Например, для поворота точки относительно оси X и параллельного переноса, ее надо последовательно умножить на матрицу поворота и параллельного переноса (см. следующий раздел). Причем, т.к. произведение матриц не коммутативно, результат зависит от последовательности умножения:
$$PRT \neq PTR$$, т.к.
$$RT \neq TR,$$
где P — точка, R — матрица поворота, T — матрица переноса. Ассоциативность произведения матриц позволяет не умножать каждую точку на несколько матриц, а сперва перемножить матрицы преобразования и умножать точки уже на результирующую матрицу:
$$PRT = P(RT)$$
Основные матрицы
Здесь приведены наиболее часто используемые в 3D-графике матрицы. Параллельный перенос точки на вектор (x, y, z):
1 | 0 | 0 | 0 |
0 | 1 | 0 | 0 |
0 | 0 | 1 | 0 |
x | y | z | 1 |
Вращение относительно оси X на угол a:
1 | 0 | 0 | 0 |
0 | cos a | sin a | 0 |
0 | -sin a | cos a | 0 |
0 | 0 | 0 | 1 |
Вращение относительно оси Y на угол a:
cos a | 0 | -sin a | 0 |
0 | 1 | 0 | 0 |
sin a | 0 | cos a | 0 |
0 | 0 | 0 | 1 |
Вращение относительно оси Z на угол a:
cos a | sin a | 0 | 0 |
-sin a | cos a | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 0 | 0 | 1 |
Масштабирование по осям X, Y и Z на x, y и z соответственно:
z | 0 | 0 | 0 |
0 | y | 0 | 0 |
0 | 0 | x | 0 |
0 | 0 | 0 | 1 |
Проективная матрица с вертикальным и горизонтальным углами обзора fovx и fovy соответственно:
ctg fovx/2 | 0 | 0 | 0 |
0 | ctg fovy/2 | 0 | 0 |
0 | 0 | Zf/(Zf – Zn) | 0 |
0 | 0 | -Zn*Zf/(Zf – Zn) | 1 |
где Zn — ближняя z-плоскость. Zf — дальняя z-плоскость.
Полезно знать
В 3D-графике матрицы преобразования координат, в большинстве случаев,
являются композицией (произведением) матриц вращения, масштабирования и
переноса, и имеют следующую структуру:
Rx | Ry | Rz | 0 |
Ux | Uy | Uz | 0 |
Fx | Fy | Fz | 0 |
Tx | Ty | Tz | 1 |
где R — вектор, показывающий направление оси X новой (т.е. задаваемой данной матрицей) системы координат, в координатах исходной. U и F, соответственно, направления осей Y и Z. Модули этих векторов совпадают с масштабированием по соответствующим осям в новой системе. T — вектор переноса, совмещающего начала координат исходной и новой системы. Получается, что подматрица 3х3, состоящая из векторов R, U и F, задает вращение и масштабирование, а четвертая строка отвечает за перенос.