Функция torch.take в PyTorch
Справочное руководство Pytorch torch
torch.takeЭто функция в PyTorch, используемая для извлечения элементов по заданным позициям индексов. Она рассматривает входной тензор как одномерный массив и возвращает элементы в указанных позициях индексов.
Определение функции
torch.take(input, index)
Parameters:
input(Tensor): входной тензор.index(Tensor): Целочисленный индексный тензор, задающий позиции элементов для извлечения.
Возвращаемое значение:
torch.Tensor: Возвращает новый тензор, состоящий из элементов в указанных индексных позициях.
Пример использования
Пример
import torch
# Создать 2D-тензор
x = torch.tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print("Исходный тензор:")
print(x)
# Рассматривайте двумерный тензор как одномерный массив, индексы 0-8
# Получить элементы по индексам 0, 4, 8
index = torch.tensor([0, 4, 8])
y = torch.take(x, index)
print("nIndex:", index)
print("Извлечённые элементы:", y)
# Создать 2D-тензор
x = torch.tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print("Исходный тензор:")
print(x)
# Рассматривайте двумерный тензор как одномерный массив, индексы 0-8
# Получить элементы по индексам 0, 4, 8
index = torch.tensor([0, 4, 8])
y = torch.take(x, index)
print("nIndex:", index)
print("Извлечённые элементы:", y)
Результат вывода:
原始张量:
tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
索引: tensor([0, 4, 8])
取出的元素: tensor([1, 5, 9])
Пример
import torch
# Трёхмерный тензор
x = torch.arange(24).reshape(2, 3, 4)
print("Исходный 3D-тензор:")
print(x)
print("Форма:", x.shape)
# Получить элементы по нескольким индексам
index = torch.tensor([0, 1, 2, 10, 20, 23])
y = torch.take(x, index)
print("nIndex:", index)
print("Извлечённые элементы:", y)
# Трёхмерный тензор
x = torch.arange(24).reshape(2, 3, 4)
print("Исходный 3D-тензор:")
print(x)
print("Форма:", x.shape)
# Получить элементы по нескольким индексам
index = torch.tensor([0, 1, 2, 10, 20, 23])
y = torch.take(x, index)
print("nIndex:", index)
print("Извлечённые элементы:", y)
Результат вывода:
原始3D张量:
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
形状: torch.Size([2, 3, 4])
索引: tensor([ 0, 1, 2, 10, 20, 23])
取出的元素: tensor([ 0, 1, 2, 10, 20, 23])
Пример
import torch
# Использовать отрицательные индексы
x = torch.tensor([[1, 2, 3],
[4, 5, 6]])
# Отрицательные индексы отсчитываются с конца
index = torch.tensor([0, -1]) # Первый и последний элементы
y = torch.take(x, index)
print("Оригинал:", x)
print("Индекс [0, -1]:", y)
# Использовать отрицательные индексы
x = torch.tensor([[1, 2, 3],
[4, 5, 6]])
# Отрицательные индексы отсчитываются с конца
index = torch.tensor([0, -1]) # Первый и последний элементы
y = torch.take(x, index)
print("Оригинал:", x)
print("Индекс [0, -1]:", y)
Результат вывода:
原始: tensor([[1, 2, 3],
[4, 5, 6]])
索引 [0, -1]: tensor([1, 6])
Пример
import torch
# Случайный выбор элементов
x = torch.randn(10, 10)
# Случайно сгенерировать 10 индексов
index = torch.randint(0, 100, (10,))
print("Случайные индексы:", index)
# Извлечь элементы по соответствующим позициям
selected = torch.take(x, index)
print("Форма исходного тензора:", x.shape)
print("Форма выбранных элементов:", selected.shape)
print("Выбранные элементы:", selected)
# Случайный выбор элементов
x = torch.randn(10, 10)
# Случайно сгенерировать 10 индексов
index = torch.randint(0, 100, (10,))
print("Случайные индексы:", index)
# Извлечь элементы по соответствующим позициям
selected = torch.take(x, index)
print("Форма исходного тензора:", x.shape)
print("Форма выбранных элементов:", selected.shape)
print("Выбранные элементы:", selected)
Результат вывода:
随机索引: tensor([12, 45, 67, 82, 35, 59, 92, 7, 28, 73]) 原始张量形状: torch.Size([10, 10]) 选中的元素形状: torch.Size([10]) 选中的元素: tensor([ 0.2345, -0.1234, 0.5678, 1.2345, -0.6789, 0.8901, -0.3456, 0.1234, -0.5678, 0.7890])
Примечание:torch.takeВходной тензор рассматривается как уплощённый одномерный тензор для индексации. Индексы должны находиться в допустимом диапазоне (от 0 до numel-1). Также можно использовать отрицательные индексы (-1 обозначает последний элемент).
Другие расширения