- Как работать с матрицами в Python
- Матрицы и библиотека NumPy
- Подключение библиотеки NumPy
- Создание
- Нулевая матрица
- Получение строки, столбца и элемента
- Умножение и сложение
- Транспонированная и обратная
- Получение максимального и минимального элемента
- Заключение
- Python numpy.argmax (): Сообщение для начинающих
- Нахождение максимального элемента из матрицы с python numpy.argmax ()
- Использование NP.UNRAVEL_INDEX на выходе Argmax
- Заполните код для печати максимального элемента для матрицы
- Найти максимальные элементы вдоль столбцов с помощью python numpy.argmax ()
- Найти максимальные элементы вдоль рядов
- Заключение
- Читайте ещё по теме:
- Python Урок 8. Матрицы (двумерный массив)
- Обработка элементов двумерного массива
Как работать с матрицами в Python
Матрица — это двумерный массив, состоящий из M строк и N столбцов. Матрицы часто используются в математических вычислениях. Программисты работают с матрицами в основном в научной области, однако их можно использовать и для других вещей, например, для быстрой генерации уровней в видео-игре.
Матрицы и библиотека NumPy
Программист может самостоятельно реализовать все функции для работы с матрицами: умножение, сложение, транспонирование и т. д. На Python это сделать гораздо проще, чем на более низкоуровневых языках, таких как C.
Но каждый раз писать одни и те же алгоритмы не имеет смысла, поэтому была разработана библиотека NumPy. Она используется для сложных научных вычислений и предоставляет программисту функции для работы с двумерными массивами.
Вместо того чтобы писать десятки строк кода для выполнения простых операций над матрицами, программист может использовать одну функцию из NumPy. Библиотека написана на Python, C и Фортране, поэтому функции работают даже быстрее, чем на чистом Python.
Подключение библиотеки NumPy
NumPy не встроена в интерпретатор Python, поэтому перед импортом её необходимо установить. Для этого в можно воспользоваться утилитой pip. Введите в консоле команду:
Теперь, когда библиотека установлена, её можно подключить с помощью команды import . Для удобства переименуем numpy при импорте в np следующим образом:
Ниже в примерах будет использован именно такой импорт, поэтому обращение к библиотеке будет через np , а не numpy !
Создание
Для создании матрицы используется функция array(). В функцию передаётся список. Вот пример создания, мы подаём в качестве аргумента функции двумерный список:
Вторым параметром можно задать тип элементов матрицы:
a = np.array([[3, 3, 3],[2, 5, 5]], int) print(a)
Тогда в консоль выведется:
Обратите внимание, что если изменить 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)
Результат этого кода будет следующий:
Получение строки, столбца и элемента
Чтобы получить строку двухмерной матрицы, нужно просто обратиться к ней по индексу следующим образом:
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)
Результирующая матрица будет равна:
Важно помнить, что складывать можно только матрицы с одинаковым количеством строк и столбцов, иначе программа на Python завершится с исключением ValueError.
Умножение матриц сильно отличается от сложения. Не получится просто перемножить соответствующие элементы двух матриц. Во-первых, матрицы должны быть согласованными, то есть количество столбцов одной должно быть равно количеству строк другой и наоборот, иначе программа вызовет ошибку.
Умножение в NumPy выполняется с помощью метода dot().
Пример умножения:
arr1 = np.array([[3,3],[2,5]]) arr2 = np.array([[2,4],[1,3]]) temp = arr1.dot(arr2) print(temp)
Результат выполнения этого кода будет следующий:
Как она получилась? Разберём число 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)
В результате получится матрица:
Чтобы получить обратную матрицу, необходимо использовать модуль 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 numpy.argmax (): Сообщение для начинающих
В этом руководстве мы узнаем о numpy.argmax () Функция в Python Отказ Эта функция возвращает индексы максимальных элементов в матрице. Функция позволяет пройти аргумент, упомянующий ось, наряду, на которой вам нужно найти индексы максимальных элементов.
Мы получаем три варианта при использовании функции argmax.
- Найдите максимальный элемент для всей матрицы. (По умолчанию)
- Получите максимальный элемент для каждой строки.
- Получите максимальный элемент для каждого столбца.
Давайте посмотрим, как использовать эту функцию.
Нахождение максимального элемента из матрицы с python numpy.argmax ()
Давайте начнем с импорта Numpy и создания образца матрицы ..
import numpy as np a = np.arange(12).reshape(4,3) + 10 print(a)
[[10 11 12] [13 14 15] [16 17 18] [19 20 21]]
Теперь давайте найдем индекс максимального элемента в массиве.
Мы получаем 11 в качестве вывода. Это связано с тем, что в функции Numpy.argmax () не упоминается оси. Как только это сделано, он возвращает индекс последнего элемента в массиве.
Или в основном, без указанной оси функция Python Numpy.argmax () возвращает количество элементов в массиве.
Мы можем использовать функцию NP.UNRAVAVEL_INDEX для получения индекса, соответствующего 2D-массиве с вывода Numpy.argmax.
Примечание: В случае нескольких вхождений максимальных значений функция возвращает индексы, соответствующие первому.
Использование NP.UNRAVEL_INDEX на выходе Argmax
Использовать np.unravel_index Функция на выходе Argmax, давайте запустим следующий фрагмент кода:
index = np.unravel_index(np.argmax(a), a.shape) print(index) print(a[index])
Мы можем объединить код из этих двух секций, чтобы напрямую печатать максимальный элемент.
Заполните код для печати максимального элемента для матрицы
import numpy as np a = np.arange(12).reshape(4,3) + 10 print(a) index = np.unravel_index(np.argmax(a), a.shape) print(index) print(a[index])
Найти максимальные элементы вдоль столбцов с помощью python numpy.argmax ()
Чтобы найти максимальные элементы для каждого использования столбцов:
import numpy as np a = np.arange(12).reshape(4,3) + 10 print(np.argmax(a, axis=0))
Это дает Индексное значение максимальных элементов вдоль каждого столбца.
Точно так же, если мы упомянем оси как 1, то мы можем получить индексы максимальных элементов вдоль рядов.
Найти максимальные элементы вдоль рядов
Чтобы найти максимальные элементы для каждой используемой строки:
import numpy as np a = np.arange(12).reshape(4,3) + 10 print(np.argmax(a, axis=1))
Заключение
В этом руководстве было функция numpy.argmax () в Python. Мы узнали, как эта функция используется для нахождения максимальных элементов вдоль разных осей матрицы.
Читайте ещё по теме:
Python Урок 8. Матрицы (двумерный массив)
Для работы с матрицами в Python также используются списки. Каждый элемент списка-матрицы содержит вложенный список.
Рассмотрим пример матрицы размера 4 х 3:
matrix = [[-1, 0, 1], [-1, 0, 1], [0, 1, -1], [1, 1, -1]]
matrix = [[-1, 0, 1], [-1, 0, 1], [0, 1, -1], [1, 1, -1]]
Данный оператор можно записать в одну строку:
matrix = [[-1, 0, 1], [-1, 0, 1], [0, 1, -1], [1, 1, -1]]
matrix = [[-1, 0, 1], [-1, 0, 1], [0, 1, -1], [1, 1, -1]]
def printMatrix ( matrix ): for i in range ( len(matrix) ): for j in range ( len(matrix[i]) ): print ( "".format(matrix[i][j]), end = "" ) print ()
def printMatrix ( matrix ): for i in range ( len(matrix) ): for j in range ( len(matrix[i]) ): print ( «».format(matrix[i][j]), end = «» ) print ()
В примере i – это номер строки, а j – номер столбца;
len(matrix) – число строк в матрице.
def printMatrix ( matrix ): for row in matrix: for x in row: print ( "".format(x), end = "" ) print ()
def printMatrix ( matrix ): for row in matrix: for x in row: print ( «».format(x), end = «» ) print ()
from random import randint n, m = 3, 3 a = [[randint(1, 10) for j in range(m)] for i in range(n)] print(a)
from random import randint n, m = 3, 3 a = [[randint(1, 10) for j in range(m)] for i in range(n)] print(a)
Обработка элементов двумерного массива
Нумерация элементов двумерного массива, как и элементов одномерного массива, начинается с нуля.
Т.е. matrix[2][3] — это элемент третьей строки четвертого столбца.
p = 1 for i in range(N): for j in range(M): p *= matrix[i][j] print (p)
p = 1 for i in range(N): for j in range(M): p *= matrix[i][j] print (p)
s = 0 for row in matrix: s += sum(row) print (s)
s = 0 for row in matrix: s += sum(row) print (s)
Для поиска суммы существует стандартная функция sum.
Задание Python 8_0:
Получены значения температуры воздуха за 4 дня с трех метеостанций, расположенных в разных регионах страны:
Номер станции | 1-й день | 2-й день | 3-й день | 4-й день |
---|---|---|---|---|
1 | -8 | -14 | -19 | -18 |
2 | 25 | 28 | 26 | 20 |
3 | 11 | 18 | 20 | 25 |
Т.е. запись показаний в двумерном массиве выглядела бы так:
- Распечатать температуру на 2-й метеостанции за 4-й день и на 3-й метеостанции за 1-й день.
- Распечатать показания термометров всех метеостанций за 2-й день.
- Определить среднюю температуру на 3-й метеостанции.
- Распечатать, в какие дни и на каких метеостанциях температура была в диапазоне 24-26 градусов тепла.
Задание Python 8_1:
Написать программу поиска минимального и максимального элементов матрицы и их индексов.
Задание Python 8_2:
Написать программу, выводящую на экран строку матрицы, сумма элементов которой максимальна.
for i in range(N): # работаем с matrix[i][i]
for i in range(N): # работаем с matrix[i][i]
for i in range(N): # работаем с matrix[i][N-1-i]
for i in range(N): # работаем с matrix[i][N-1-i]
for i in range(N): c = A[i][2] A[i][2] = A[i][4] A[i][4] = c
for i in range(N): c = A[i][2] A[i][2] = A[i][4] A[i][4] = c
for i in range(N): A[i][2], A[i][4] = A[i][4], A[i][2]
for i in range(N): A[i][2], A[i][4] = A[i][4], A[i][2]
Задание Python 8_3:
Составить программу, позволяющую с помощью датчика случайных чисел сформировать матрицу размерностью N. Определить: