Изучаем матрицы в питоне и массивы NumPy в Python

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

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

  • Матрицы в Python
  • NumPy массивы в Python
  • Как создать массив NumPy?
    • Массив целых чисел, чисел с плавающей точкой и составных чисел
    • Массив нулей и единиц
    • Использование arange() и shape()
  • Операции с матрицами
    • Сложение двух матриц или сумма элементов массива Python
    • Умножение двух матриц 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 =", 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 .

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

  • Ознакомьтесь: Как установить NumPy Python?
  • Если вы работаете в Windows, скачайте и установите дистрибутив anaconda Python. Он поставляется вместе с 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.

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-31 до 2-31-1.

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 .

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

Рассмотрим, как выполнить ту же задачу, используя массив 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 для вычисления транспонирования матрицы.

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 аналогично разделению списка. Рассмотрим пример:

import numpy as np
letters = 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 np
A = 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 для анализа данных.

Вадим Дворниковавтор-переводчик статьи «Python Matrices and NumPy Arrays»

Изучаем матрицы в питоне и массивы NumPy в Python

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

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

  • Матрицы в Python
  • NumPy массивы в Python
  • Как создать массив NumPy?
    • Массив целых чисел, чисел с плавающей точкой и составных чисел
    • Массив нулей и единиц
    • Использование arange() и shape()
  • Операции с матрицами
    • Сложение двух матриц или сумма элементов массива Python
    • Умножение двух матриц 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 =", 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 .

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

  • Ознакомьтесь: Как установить NumPy Python?
  • Если вы работаете в Windows, скачайте и установите дистрибутив anaconda Python. Он поставляется вместе с 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.

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-31 до 2-31-1.

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 .

Выше мы привели пример сложение, умножение матриц и транспонирование матрицы. Мы использовали вложенные списки, прежде чем создавать эти программы. Рассмотрим, как выполнить ту же задачу, используя массив 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 для вычисления транспонирования матрицы.

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 аналогично разделению списка. Рассмотрим пример:

import numpy as np
letters = 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 np
A = 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 для анализа данных.

Вадим Дворниковавтор-переводчик статьи «Python Matrices and NumPy Arrays»

Матрица Python и введение в NumPy

В этой статье мы узнаем о матрицах Python с использованием вложенных списков и пакета NumPy.

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

Эта матрица представляет собой матрицу 3×4 (произносится как «три на четыре»), поскольку она имеет 3 строки и 4 столбца.


Python Matrix

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

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

Мы можем рассматривать этот список как матрицу, имеющую 2 строки и 3 столбца.

Обязательно изучите списки Python, прежде чем продолжить эту статью.


Давайте посмотрим, как работать с вложенным списком.

 А = [[1, 4, 5, 12],
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]]
печать("А=", А)
print("A[1] =", A[1]) # 2-я строка
print("A[1][2] =", A[1][2]) # 3-й элемент 2-й строки
print("A[0][-1] =", A[0][-1]) # Последний элемент 1-й строки
столбец = []; # пустой список
для строки в A:
  столбец.добавлять (строка [2])
print("3-й столбец =", столбец)
 

Когда мы запустим программу, вывод будет:

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

Вот еще несколько примеров, связанных с матрицами Python с использованием вложенных списков.

  • Добавить две матрицы
  • Транспонировать матрицу
  • Умножить две матрицы

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


NumPy Array

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

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

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


NumPy предоставляет многомерный массив чисел (который на самом деле является объектом). Возьмем пример:

 импортировать numpy как np
а = np.массив ([1, 2, 3])
print(a) # Вывод: [1, 2, 3]
print(type(a)) # Вывод: 
 

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


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

Существует несколько способов создания массивов NumPy.


1. Массив целых, вещественных и комплексных чисел

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

Когда вы запустите программу, вывод будет:

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

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

 импортировать numpy как np
zeors_array = np.zeros ((2, 3))
печать (zeors_array)
'''
 Выход:
 [[0. 0. 0.]
  [0. 0. 0.]]
'''
one_array = np.ones( (1, 5), dtype=np.int32 ) // указание dtype
print(ones_array) # Вывод: [[1 1 1 1 1]]
 

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


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

 импортировать numpy как np
A = np.arange(4)
печать('А =', А)
B = np. arange(12).reshape(2, 6)
печать('В =', В)
'''
Выход:
А = [0 1 2 3]
В = [[ 0 1 2 3 4 5]
 [ 6 7 8 9 10 11]]
'''
 

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


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

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


Добавление двух матриц

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

 импортировать numpy как np
A = np.массив ([[2, 4], [5, -6]])
B = np.массив([[9, -3], [3, 6]])
C = A + B # поэлементное сложение
печать(С)
'''
Выход:
[[11 1]
 [ 8 0]]
 ''' 

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

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

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

 импортировать numpy как np
A = np.массив ([[3, 6, 7], [5, -3, 0]])
B = np.массив ([[1, 1], [2, 1], [3, -3]])
С = А. точка (В)
печать(С)
'''
Выход:
[[ 36 -12]
 [-1 2]]
'''
 

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

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

 импортировать numpy как np
A = np.массив ([[1, 1], [2, 1], [3, -3]])
печать (A.transpose())
'''
Выход:
[[ 1 2 3]
 [ 1 1 -3]]
'''
 

Как видите, NumPy значительно облегчил нашу задачу.


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

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

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

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

Когда вы запустите программу, вывод будет:

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

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

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

Когда мы запустим программу, вывод будет:

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

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

 импорт numpy как np
A = np.массив([[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]) # Последняя строка (в данном случае 3-я строка) 

Когда мы запустим программу, вывод будет:

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

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

 импорт numpy как np
A = np.массив([[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]) # Последний столбец (в данном случае 4-й столбец)
 

Когда мы запустим программу, вывод будет:

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

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


Нарезка матрицы

Нарезка одномерного массива NumPy аналогична списку. Если вы не знаете, как работает нарезка для списка, посетите статью Понимание нотации срезов в Python.

Возьмем пример:

 импортировать numpy как np
буквы = 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]
 

Теперь давайте посмотрим, как мы можем разрезать матрицу.

 импортировать numpy как np
A = np.массив([[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 для обработки и анализа данных.

Ресурсы NumPy, которые могут оказаться полезными:

  • Учебное пособие по NumPy
  • Ссылка NumPy

Программа Python для умножения двух матриц

В этом примере мы научимся умножать матрицы двумя разными способами: вложенным циклом и вложенным списком.

Чтобы понять этот пример, вы должны знать следующие темы программирования Python :

В Python мы можем реализовать матрицу как вложенный список (список внутри списка).

Каждый элемент можно рассматривать как строку матрицы.

Например, X = [[1, 2], [4, 5], [3, 6]] будет представлять собой матрицу 3x2 .

Первую строку можно выбрать как X[0] . И элемент в первой строке, первом столбце можно выбрать как X[0][0] .

Умножение двух матриц X и Y определяется, только если количество столбцов в X равно количеству строк Y .

Если X является матрицей n x m , а Y является матрицей m x l , то XY определено и имеет размерность n x l (но 5 YX не определено). Вот несколько способов реализовать матричное умножение в Python.

Исходный код: Умножение матриц с использованием вложенного цикла

 # Программа для умножения двух матриц с использованием вложенных циклов
#матрица 3х3
Х = [[12,7,3],
    [4 ,5,6],
    [7 ,8,9]]
#матрица 3х4
Y = [[5,8,1,2],
    [6,7,3,0],
    [4,5,9,1]]
# результат 3x4
результат = [[0,0,0,0],
         [0,0,0,0],
         [0,0,0,0]]
# перебираем строки X
для i в диапазоне (len (X)):
   # перебираем столбцы Y
   для j в диапазоне (len (Y [0])):
       # перебираем строки Y
       для k в диапазоне (len (Y)):
           результат[i][j] += X[i][k] * Y[k][j]
для r в результате:
   печать (р)
 

Выход

  [114, 160, 60, 27]
[74, 97, 73, 14]
[119, 157, 112, 23] 
 

В этой программе мы использовали вложенные для циклов для перебора каждой строки и каждого столбца. Сумму произведений суммируем в результате.

Этот метод прост, но требует больших вычислительных ресурсов, поскольку мы увеличиваем порядок матрицы.

Для больших операций с матрицами мы рекомендуем оптимизированные программные пакеты, такие как NumPy, которые в несколько (порядка 1000) раз быстрее, чем приведенный выше код.

Исходный код: умножение матриц с использованием понимания вложенных списков

 # Программа для умножения двух матриц с использованием понимания списков
#матрица 3х3
Х = [[12,7,3],
    [4 ,5,6],
    [7 ,8,9]]
#матрица 3х4
Y = [[5,8,1,2],
    [6,7,3,0],
    [4,5,9,1]]
# результат 3x4
результат = [[сумма(a*b для a,b в zip(X_row,Y_col)) для Y_col в zip(*Y)] для X_row в X]
для r в результате:
   печать (р)
 

Вывод этой программы такой же, как и выше. Чтобы понять приведенный выше код, мы должны сначала узнать о встроенной функции zip() и распаковке списка аргументов с помощью оператора *.

Мы использовали вложенный список для перебора каждого элемента в матрице.