Матрицы и массивы NumPy в Python

Матрица — это двухмерная структура данных, в которой числа расположены в виде строк и столбцов. К примеру:

Матрицы и массивы NumPy в Python

Эта матрица будет матрицей три на четыре, так как она состоит из 3 строк и 4 столбцов.

Матрицы Python

Python не имеет в себя встроенного типа данных для матриц. Но можно легко рассматривать список как матрицу. Например:

A = [[1, 4, 5], [-5, 8, 9]]

Этот список будет матрицей на 2 строки и 3 столбца.

Матрицы и массивы NumPy в Python

Обязательно ознакомьтесь с документацией по спискам 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 =", column)

Когда мы запустим эту программу, результат будет следующий:

A = [[1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19]]A [1] = [-5, 8, 9, 0]A [1] [2] = 9A [0] [- 1] = 123-й столбец = [5, 9, 11]

Использование вложенных списков в виде матрицы подходит для простых вычислительных задач. Но в Python есть более эффективный метод работы с матрицами – NumPy.

NumPy массивы

NumPy — это расширение для научных вычислений, которое поддерживает мощный объект N-мерного массива. Прежде чем использовать NumPy, надо установить его. Для получения дополнительной информации,

  • Ознакомьтесь: Как установить NumPy?
  • Если вы работаете в Windows, скачайте и установите дистрибутив anaconda Python. Он поставляется вместе с NumPy и иными расширениями.

После установки NumPy можно импортировать и использовать его.

NumPy предлагает собой многомерный массив чисел(который фактически будет объектом). Давайте рассмотрим приведенный ниже пример:

import numpy as npa = np.array([1, 2, 3])print(a)               # Отображение: [1, 2, 3]print(type(a))         # Отображение: <class 'numpy.ndarray'>

Как видите, класс массива NumPy называется ndarray.

Как создать массив NumPy?

Существует пару методов создания массивов NumPy.

Массив целых чисел, чисел с плавающей точкой и составных чисел

import numpy as npA = np.array([[1, 2, 3], [3, 4, 5]])print(A)A = np.array([[1.1, 2, 3], [3, 4, 5]]) # Массив чисел с плавающей запятойprint(A)A = np.array([[1, 2, 3], [3, 4, 5]], dtype = complex) # Массив составных чиселprint(A)

Когда вы запустите эту программу, результат будет следующий:

[[1 2 3] [3 4 5]][[1.1 2. 3.] [3. 4. 5.]][[1. + 0.j 2. + 0.j 3. + 0.j] [3. + 0.j 4. + 0.j 5. + 0.j]]

Массив нулей и единиц

import numpy as npzeors_array = np.zeros((2, 3))print(zeors_array)''' Отображение: [[0. 0. 0.]  [0. 0. 0.]]'''ones_array = np.ones((1, 5), dtype=np.int32) // указание dtypeprint(ones_array)      # Отображение: [[1 1 1 1 1]]

Здесь мы указали dtype — 32 бита(4 байта). Следовательно, этот массив может принимать значения от -2
-31
до 2
-31
-1.

Использование arange() и shape()

import numpy as npA = np.arange(4)print('A =', A)B = np.arange(12).reshape(2, 6)print('B =', B)''' Отображение:A = [0 1 2 3]B = [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11]]'''

Узнайте больше о иных методах создания массива NumPy.

Операции с матрицами

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

Сложение двух матриц

Мы используем оператор +, чтобы сложить соответствующие элементы двух матриц NumPy.

import numpy as npA = np.array([[2, 4], [5, -6]])B = np.array([[9, -3], [3, 6]])C = A + B      # сложение соответствующих элементовprint(C)''' Отображение:[[11 1] [ 8 0]] '''

Умножение двух матриц

Чтобы умножить две матрицы, мы используем способ dot(). Узнайте больше о том, как работает numpy.dot.

Примечание: * используется для умножения массива(умножения соответствующих элементов двух массивов), а не умножения матрицы.

import numpy as npA = np.array([[3, 6, 7], [5, -3, 0]])B = np.array([[1, 1], [2, 1], [3, -3]])C = a.dot(B)print(C)''' Отображение:[[ 36 -12] [ -1 2]]'''

Транспонирование матрицы

Мы используем numpy.transpose для вычисления транспонирования матрицы.

import numpy as npA = np.array([[1, 1], [2, 1], [3, -3]])print(A.transpose())''' Отображение:[[ 1 2 3] [ 1 1 -3]]'''

Как видите, NumPy значительно упростил нашу задачу.

Доступ к элементам матрицы, строкам и столбца

Доступ к элементам матрицы

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

import numpy as npA = np.array([2, 4, 6, 8, 10])print("A[0] =", A[0])     # Первый элемент print("A[2] =", A[2])     # Третий элемент print("A[-1] =", A[-1])   # Последний элемент     

Когда вы запустите эту программу, результат будет следующий:

A [0] = 2A [2] = 6A [-1] = 10

Сейчас выясним, как приобрести доступ к элементам двухмерного массива(который в основном представляет собой матрицу).

import numpy as npA = np.array([[1, 4, 5, 12],    [-5, 8, 9, 0],    [-6, 7, 11, 19]])#  Первый элемент первой строкиprint("A[0][0] =", A[0][0])  # Третий элемент второй строкиprint("A[1][2] =", A[1][2])# Последний элемент последней строкиprint("A[-1][-1] =", A[-1][-1])     

Когда мы запустим эту программу, результат будет следующий:

A [0] [0] = 1A [1] [2] = 9A [-1] [- 1] = 19

Доступ к строкам матрицы

import numpy as npA = np.array([[1, 4, 5, 12],     [-5, 8, 9, 0],    [-6, 7, 11, 19]])print("A[0] =", A[0]) # Первая строкаprint("A[2] =", A[2]) # Третья строкаprint("A[-1] =", A[-1]) # Последняя строка(третья строка в данном случае)

Когда мы запустим эту программу, результат будет следующий:

A [0] = [1, 4, 5, 12]A [2] = [-6, 7, 11, 19]A [-1] = [-6, 7, 11, 19]

Доступ к столбцам матрицы

import numpy as npA = np.array([[1, 4, 5, 12],     [-5, 8, 9, 0],    [-6, 7, 11, 19]])print("A[:,0] =",A[:,0]) # Первый столбецprint("A[:,3] =", A[:,3]) # Четвертый столбецprint("A[:,-1] =", A[:,-1]) # Последний столбец(четвертый столбец в данном случае)

Когда мы запустим эту программу, результат будет следующий:

A [:, 0] = [1 -5 -6]A [:, 3] = [12 0 19]A [:, - 1] = [12 0 19]

Если вы не знаете, как работает приведенный выше код, прочтите раздел «Разделение матрицы».

Разделение матрицы

Разделение одномерного массива NumPy аналогично разделению списка. Рассмотрим пример:

import numpy as npletters = np.array([1, 3, 5, 7, 9, 7, 5])# с 3-го по 5-ый элементыprint(letters[2:5])        # Отображение: [5, 7, 9]# с 1-го по 4-ый элементыprint(letters[:-5])        # Отображение: [1, 3]   # с 6-го до последнего элементаprint(letters[5:])         # Отображение:[7, 5]# с 1-го до последнего элементаprint(letters[:])          # Отображение:[1, 3, 5, 7, 9, 7, 5]# список в обратном порядкеprint(letters[::-1])          # Отображение:[5, 7, 9, 7, 5, 3, 1]

Сейчас посмотрим, как разделить матрицу.

import numpy as npA = np.array([[1, 4, 5, 12, 14],     [-5, 8, 9, 0, 17],    [-6, 7, 11, 19, 21]])print(A[:2,:4])  # две строки, четыре столбца''' Отображение:[[ 1 4 5 12] [-5 8 9 0]]'''print(A[:1,])  # первая строка, все столбцы''' Отображение:[[ 1 4 5 12 14]]'''print(A[:,2])  # все строки, второй столбец''' Отображение:[ 5 9 11]'''print(A[:, 2:5])  # все строки, с третьего по пятый столбец''' Отображение:[[ 5 12 14] [ 9 0 17] [11 19 21]]'''

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *