English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этой статье мы будем изучать использование вложенных списков и пакета NumPy для работы с матрицами в Python.
Матрица - это двумерная структура данных, где числа排列ены по строкам и столбцам. Например:
Эта матрица является матрицей 3x4 ("три на четыре")因为她 имеет 3 строки и 4 столбца.
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("3-й столбец =", column)
Когда мы запустим программу, вывод будет:
A = [[1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19]] A[1] = [-5, 8, 9, 0] A[1][2] = 9 A[0][-1] = 12 3-й столбец = [5, 9, 11]
Ниже приведены некоторые примеры Python-матриц, связанных с использованием вложенных списков.
Использование вложенных списков в качестве матриц можно использовать для простых вычислительных задач, но использованиеNumPyПакет в Python является更好的 способом обработки матриц.
NumPy — это пакет для научных вычислений, который поддерживает мощные объекты многоугольных массивов. Перед использованием NumPy вам нужно сначала установить его. Для получения дополнительной информации,
Перейдите по адресу:Как установить NumPy?
Если вы используете Windows, пожалуйста, скачайте и установите Python свыпуск Anaconda它 включает в себя NumPy и другие некоторые пакеты, связанные с наукой о данных и машинным обучением.
Как только вы установите NumPy, вы сможете импортировать и использовать его.
NumPy предоставляет многоугольные массивы чисел (фактически, это объект). Давайте举个 пример:
import numpy as np a = np.array([1, 2, 3]) print(a) # вывод: [1, 2, 3] print(type(a)) # вывод: <class 'numpy.ndarray'>
Как вы видите, класс массива NumPy называется ndarray.
Есть несколько способов создания массивов NumPy.
1. Масивы целых, плавающих и комплексных чисел
import numpy as np A = 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 np zeors_array = np.zeros((2, 3)) print(zeors_array) ''' Вывод: [[0. 0. 0.]] [0. 0. 0.] ''' ones_array = np.ones((1, 5), dtype=np.int32) // dtype print(ones_array) # вывод: [[1 1 1 1 1]]
Здесь мы指定уем dtype 32-битным (4 байта). Таким образом, этот массив может принимать значения от до. -2-312-31-1
3. Использование arange() и shape()
import numpy as np A = 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 массиваДополнительная информация о других методах.
Верхом, мы предоставили вам 3 примера: сложение двух матриц, умножение двух матриц и transpose одной матрицы. Перед написанием этих программ мы использовали вложенные списки. Давайте посмотрим, как можно выполнить те же задачи с помощью массивов NumPy.
Мы используем оператор + для сложения элементов соответствующих элементов двух матриц NumPy.
import numpy as np A = 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 np A = 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Рассчитываем transpose матрицы.
import numpy as np A = np.array([[1, 1], [2, 1], [3, -3]]) print(A.transpose()) ''' Вывод: [[1 2 3] [1 1 -3] '''
Как вы видите, NumPy упрощает наши задачи.
Как и списки, мы можем использовать индексы для доступа к элементам матрицы. Давайте начнем с одномерного массива NumPy.
import numpy as np A = np.array([2, 4, 6, 8, 10]) print("A[0] =", A[0]) # Первый элемент print("A[2] =", A[2]) # Третий элемент print("A[-1] =", A[-1]) # Последний элемент
Запуск программы выводит:
A[0] = 2 A[2] = 6 A[-1] = 10
Теперь, давайте посмотрим, как можно получить доступ к элементам двумерного массива (в основном это матрица).
import numpy as np A = 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] = 1 A[1][2] = 9 A[-1][-1] = 19
import numpy as np A = 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 np A = 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 аналогичны спискам. Если вы не знаете, как работает вырезание списков, пожалуйста, обратитесь кПонять символы вырезания Python。
Давайте приведем пример:
import numpy as np letters = np.array([1, 3, 5, 7, 9, 7, 5]) # 3rd to 5th elements 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 np A = np.array([[1, 4, 5, 12, 14], [-5, 8, 9, 0, 17], [-6, 7, 11, 19, 21]]) print(A[:2, :4]) # две строки, четыре столбца ''' Output: [[ 1 4 5 12]] [-5 8 9 0]] ''' print(A[:1,]) # первая строка, все столбцы ''' Output: [[ 1 4 5 12 14]] ''' print(A[:, 2]) # все строки, столбец номер два ''' Output: [ 5 9 11] ''' print(A[:, 2:5]) # все строки, столбцы с третьего по пятое '''Output: [[ 5 12 14] [ 9 0 17] [11 19 21]] '''
Как вы видите, использование NumPy (вместо вложенных списков) позволяет легче обрабатывать матрицы, и мы даже не коснулись основ. Мы рекомендуем вам тщательно изучить пакет NumPy, особенно если вы пытаетесь использовать Python для данных науки/анализа.