Как работать с матрицами в Python
Матрица — это двумерный массив, состоящий из M строк и N столбцов. Матрицы часто используются в математических вычислениях. Программисты работают с матрицами в основном в научной области, однако их можно использовать и для других вещей, например, для быстрой генерации уровней в видео-игре.
Матрицы и библиотека NumPy
Программист может самостоятельно реализовать все функции для работы с матрицами: умножение, сложение, транспонирование и т. д. На Python это сделать гораздо проще, чем на более низкоуровневых языках, таких как C.
Но каждый раз писать одни и те же алгоритмы не имеет смысла, поэтому была разработана библиотека NumPy. Она используется для сложных научных вычислений и предоставляет программисту функции для работы с двумерными массивами.
Вместо того чтобы писать десятки строк кода для выполнения простых операций над матрицами, программист может использовать одну функцию из NumPy. Библиотека написана на Python, C и Фортране, поэтому функции работают даже быстрее, чем на чистом Python.
Подключение библиотеки NumPy
NumPy не встроена в интерпретатор Python, поэтому перед импортом её необходимо установить. Для этого в можно воспользоваться утилитой pip. Введите в консоле команду:
pip install numpy
Теперь, когда библиотека установлена, её можно подключить с помощью команды import . Для удобства переименуем numpy при импорте в np следующим образом:
import numpy as np
Ниже в примерах будет использован именно такой импорт, поэтому обращение к библиотеке будет через np , а не numpy !
Создание
Для создании матрицы используется функция array(). В функцию передаётся список. Вот пример создания, мы подаём в качестве аргумента функции двумерный список:
a = np.array([[3, 3, 3], [2, 5, 5]])
Вторым параметром можно задать тип элементов матрицы:
a = np.array([[3, 3, 3],[2, 5, 5]], int) print(a)
Тогда в консоль выведется:
[[3 3 3] [2 5 5]]
Обратите внимание, что если изменить int на str, то тип элементов изменился на строковый. Кроме того, при выводе в консоль NumPy автоматически отформатировал вывод, чтобы он выглядел как матрица, а элементы располагались друг под другом.
В качестве типов элементов можно использовать int, float, bool, complex, bytes, str, buffers. Также можно использовать и другие типы NumPy: логические, целочисленные, беззнаковые целочисленные, вещественные, комплексные. Вот несколько примеров:
- np.bool8 — логическая переменная, которая занимает 1 байт памяти.
- np.int64 — целое число, занимающее 8 байт.
- np.uint16 — беззнаковое целое число, занимающее 2 байта в памяти.
- np.float32 — вещественное число, занимающее 4 байта в памяти.
- np.complex64 — комплексное число, состоящее из 4 байтового вещественного числа действительной части и 4 байтов мнимой.
Вы также можете узнать размер матрицы, для этого используйте атрибут shape:
size = a.shape print(size) # Выведет (2, 3)
Первое число (2) — количество строк, второе число (3) — количество столбцов.
Нулевая матрица
Если необходимо создать матрицу, состоящую только из нулей, используйте функцию zeros():
a_of_zeros = np.zeros((2,2)) print(a_of_zeros)
Результат этого кода будет следующий:
[[0. 0.] [0. 0.]]
Получение строки, столбца и элемента
Чтобы получить строку двухмерной матрицы, нужно просто обратиться к ней по индексу следующим образом:
temp = a[0] print(temp) #Выведет [3 3 3]
Получить столбец уже не так просто. Используем срезы, в качестве первого элемента среза мы ничего не указываем, а второй элемент — это номер искомого столбца. Пример:
arr = np.array([[3,3,3],[2,5,5]], str) temp = arr[:,2] print(temp) # Выведет ['3' '5']
Чтобы получить элемент, нужно указать номер столбца и строки, в которых он находится. Например, элемент во 2 строке и 3 столбце — это 5, проверяем (помним, что нумерация начинается с 0):
arr = np.array([[3,3,3],[2,5,5]], str) temp = arr[1][2] print(temp) # Выведет 5
Умножение и сложение
Чтобы сложить матрицы, нужно сложить все их соответствующие элементы. В Python для их сложения используется обычный оператор «+».
Пример сложения:
arr1 = np.array([[3,3,3],[2,5,5]]) arr2 = np.array([[2,4,2],[1,3,8]]) temp = arr1 + arr2 print(temp)
Результирующая матрица будет равна:
[[ 5 7 5] [ 3 8 13]]
Важно помнить, что складывать можно только матрицы с одинаковым количеством строк и столбцов, иначе программа на Python завершится с исключением ValueError.
Умножение матриц сильно отличается от сложения. Не получится просто перемножить соответствующие элементы двух матриц. Во-первых, матрицы должны быть согласованными, то есть количество столбцов одной должно быть равно количеству строк другой и наоборот, иначе программа вызовет ошибку.
Умножение в NumPy выполняется с помощью метода dot().
Пример умножения:
arr1 = np.array([[3,3],[2,5]]) arr2 = np.array([[2,4],[1,3]]) temp = arr1.dot(arr2) print(temp)
Результат выполнения этого кода будет следующий:
[[ 9 21] [ 9 23]]
Как она получилась? Разберём число 21, его позиция это 1 строка и 2 столбец, тогда мы берем 1 строку первой матрицы и умножаем на 2 столбец второй. Причём элементы умножаются позиционно, то есть 1 на 1 и 2 на 2, а результаты складываются: [3,3] * [4,3] = 3 * 4 + 3 * 3 = 21.
Транспонированная и обратная
Транспонированная матрица — это матрица, у которой строки и столбцы поменялись местами. В библиотеки NumPy для транспонирования двумерных матриц используется метод transpose(). Пример:
arr1 = np.array([[3,3],[2,5]]) temp = arr1.transpose() print(temp)
В результате получится матрица:
[[3 2] [3 5]]
Чтобы получить обратную матрицу, необходимо использовать модуль linalg (линейная алгебра). Используем функцию inv():
arr1 = np.array([[3,3],[2,5]]) temp = np.linalg.inv(arr1) print(temp)
Результирующая матрица будет равна:
[[ 0.55555556 -0.33333333] [-0.22222222 0.33333333]]
Получение максимального и минимального элемента
Чтобы получить максимальный или минимальный элемент, можно пройтись по всем элементам матрицы с помощью двух циклов for . Это стандартный алгоритм перебора, который известен почти каждому программисту:
arr = np.array([[3,3],[2,5]]) min = arr[0][0] for i in range(arr.shape[0]): for j in range(arr.shape[1]): if min > arr[i][j]: min = arr[i][j] print("Минимальный элемент:", min) # Выведет "Минимальный элемент: 2"
NumPy позволяет найти максимальный и минимальный элемент с помощью функций amax() и amin(). В качестве аргумента в функции нужно передать саму матрицу. Пример:
arr1 = np.array([[3,3],[2,5]]) min = np.amin(arr1) max = np.amax(arr1) print("Минимальный элемент:", min) # Выведет "Минимальный элемент: 2" print("Максимальный элемент:", max) # Выведет "Максимальный элемент: 5"
Как видим, результаты реализации на чистом Python и реализации с использованием библиотеки NumPy совпадают.
Заключение
На Python можно реализовать все необходимые функции для работы с матрицами. Чтобы упростить работу программистов, была создана библиотека NumPy. Она позволяет производить сложные математические вычисления легко и без ошибок, избавляя программиста от необходимости каждый раз писать один и тот же код.
Создаём матрицу в 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 — это эффективный способ организации числовой информации с помощью двумерных массивов. Они достаточно эффективны для быстрого манипулирования большими массивами данных, что делает их популярными среди разработчиков, которые хотят с относительной легкостью обрабатывать сложные задачи манипулирования изображениями и задачи линейной алгебры.
Мы рассмотрели способы создания матриц и выполнения операций с ними. Надеемся, представленные инструкции будут вам полезны.
Матрицы в Python и массивы NumPy
Матрица — это двухмерная структура данных, в которой числа расположены в виде строк и столбцов. Например:

Эта матрица является матрицей три на четыре, потому что она состоит из 3 строк и 4 столбцов.
Матрицы в Python
Python не имеет встроенного типа данных для матриц. Но можно рассматривать список как матрицу. Например:
A = [[1, 4, 5], [-5, 8, 9]]
Этот список является матрицей на 2 строки и 3 столбца.

Обязательно ознакомьтесь с документацией по спискам Python, прежде чем продолжить читать эту статью.
Давайте посмотрим, как работать с вложенным списком.
A = [[1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19]] print("A =", A) print("A[1] =", A[1]) # вторая строка print("A[1][2] =", A[1][2]) # третий элемент второй строки print("A[0][-1] =", A[0][-1]) # последний элемент первой строки column = []; # пустой список for row in A: column.append(row[2]) print("3rd column 1" data-ab-test="post_related" data-ab-key="yarpp">Как работают массивы в Python?


