Как работать с тензорами в NumPy-библиотеке Python: примеры

В прошлый раз мы разобрались с основными принципами работы тензоров в numpy, о важности представления данных для Machine Learning. В этой статье поговорим об индексации тензоров — научимся извлекать необходимые нам элементы. Мы не будем говорить о тензоре 1-го ранга, так как это всего лишь число. Как обычно, перед началом импортируем библиотеку numpy c обращением в виде np:

import numpy as np

Индексация тензоров 1-го ранга

Тензора 1-го ранга — это вектор или обычный одномерный массив:

>>> a = np.array([1, 2, 3, 4, 5])

Чтобы извлечь элемент, указываем индекс элемента (индексация начинается с нуля) в квадратных скобках. Например, извлекаем 2-й элемент:

>>> a[2]
3

Чтобы извлечь подмассив нужно указать через двоеточие:

  • start — индекс, с которого начать срез массива,
  • stop — индекс, на котором закончить срез массива (не включительно),
  • step — шаг, через который переступать при срезе массива.

Например, создаем подмассив с индексами 1 по 4:

>>> a[1:4]
array([2, 3, 4])

Шаг в этом примере не указан.
Векторы используются в классических алгоритмах машинного обучения, например, в методе опорных векторов

Индексация тензоров 2-го ранга

Тензор второго ранга — это матрица или двумерный массив. В Питоне он может быть записан следующим образом:

>>> a = np.array([[1, 2, 13, 14],
                  [5, 6, 17, 18],
                  [9, 3, 11, 12]])
>>> a
array([[ 1, 2, 13, 14],
       [ 5, 6, 17, 18],
       [ 9, 3, 11, 12]])

У матрицы имеются две оси: строки и столбцы. В качестве примера, на рисунке обозначены индексы: i — строки, j — столбцы:

Отображение матрицы с тремя строками и четырьмя столбцами
Матрица numpy

Для обращения к осям используется запятая.
Чтобы извлечь элемент, указываем через запятую индекс строки, затем индекс столбца:

>>> a[2, 1]
3

Чтобы извлечь строку, достаточно указать индекс в квадратных скобках:

>>> a[1]
array([ 5, 6, 17, 18])

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

>>> a[:, 2]
array([13, 17, 11])

Кроме того, можно получить элементы, стоящие на определенных строках и столбцах. Например, извлечем элементы, лежащие на строке с индексом 1 и на столбцах от 1 до 3:

>>> a[1, 1:3]
array([ 6, 17])

Индексация тензоров 3-го ранга

Тензор третьего ранга — это массив матриц. В Python записывается как:

>>> a = np.array([[[10, 11, 12],
                   [14, 15, 16],
                   [18, 19, 20]],
                   [[22, 23, 24],
                    [26, 27, 28],
                    [30, 31, 32]],
                   [[34, 35, 36],
                    [38, 39, 40],
                    [42, 43, 44]]])
>>> a
array([[[10, 11, 12],
        [14, 15, 16],
        [18, 19, 20]],
       [[22, 23, 24],
        [26, 27, 28],
        [30, 31, 32]],
       [[34, 35, 36],
        [38, 39, 40],
        [42, 43, 44]]])

У такого тензора 3 оси: матрица, строка, столбец. На рисунке обозначены индексы: i — матрицы, j — строки, k — столбцы:

Отображение в пространстве тензор третьего ранга
Тензор numpy

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

>>> a[1, 2, 0]
30

Чтобы извлечь матрицу, достаточно указать индекс в квадратных скобках:

>>> a[2]
array([[34, 35, 36],
       [38, 39, 40],
       [42, 43, 44]])

Чтобы извлечь строку матрицы, указывается через запятую индекс матрицы, затем строки:

>>> a[2, 1]
array([38, 39, 40])
Отображение строк тензора третьего ранга numpy
Выделение строк

Чтобы извлечь столбец матрицы, указывается номер матрицы, выбираются все строки матрица, затем номер столбца:

>>> a[0, :, 2]
array([12, 16, 20])
Выделение столбцов тензора третьего ранга numpy
Выделение столбцов

Извлечение элементов всех матриц происходит через двоеточие. Например, получим элементы матриц, стоящих на 1-й строке, 0-м столбце:

a[:, 1, 0]
array([14, 26, 38])
Выделение элемента второй строки, нулевого столбца каждой матрицы
Выделение элемента каждой матрицы numpy

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

 

Посмотреть исходный код можно в github репозитории. В следующей статье мы сравним библиотеки Pandas и NumPy: в чем различие, в каких случаях нужно использовать их для Data Science. C манипулированиями тензорами в NumPy, представлениями данных для Machine Learning вы познакомитесь на практических курсах по Python в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве.

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

Поиск по сайту