Función PyTorch torch.take
Manual de referencia de Pytorch torch
torch.takeEs una función en PyTorch que se utiliza para obtener los elementos en las posiciones de índice dadas. Trata el tensor de entrada como un arreglo unidimensional y devuelve los elementos en las posiciones de índice especificadas.
Definición de la función
torch.take(input, index)
Parámetros:
input(Tensor): Tensor de entrada.index(Tensor): Tensor de índices enteros, especifica las posiciones de los elementos a obtener.
Valor de retorno:
torch.Tensor: Devuelve un nuevo tensor compuesto por los elementos en las posiciones de índice especificadas.
Ejemplo de uso
Ejemplo
import torch
# Crear un tensor 2D
x = torch.tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print("Tensor original:")
print(x)
# Tratar el tensor 2D como un arreglo unidimensional, índices 0-8
# Obtener los elementos en las posiciones de índice 0, 4, 8
index = torch.tensor([0, 4, 8])
y = torch.take(x, index)
print("n índice:", index)
print("Elementos extraídos:", y)
# Crear un tensor 2D
x = torch.tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print("Tensor original:")
print(x)
# Tratar el tensor 2D como un arreglo unidimensional, índices 0-8
# Obtener los elementos en las posiciones de índice 0, 4, 8
index = torch.tensor([0, 4, 8])
y = torch.take(x, index)
print("n índice:", index)
print("Elementos extraídos:", y)
El resultado de salida es:
原始张量:
tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
索引: tensor([0, 4, 8])
取出的元素: tensor([1, 5, 9])
Ejemplo
import torch
# Tensor 3D
x = torch.arange(24).reshape(2, 3, 4)
print("Tensor 3D original:")
print(x)
print("Forma:", x.shape)
# Obtener elementos de múltiples índices
index = torch.tensor([0, 1, 2, 10, 20, 23])
y = torch.take(x, index)
print("n índice:", index)
print("Elementos extraídos:", y)
# Tensor 3D
x = torch.arange(24).reshape(2, 3, 4)
print("Tensor 3D original:")
print(x)
print("Forma:", x.shape)
# Obtener elementos de múltiples índices
index = torch.tensor([0, 1, 2, 10, 20, 23])
y = torch.take(x, index)
print("n índice:", index)
print("Elementos extraídos:", y)
El resultado de salida es:
原始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])
Ejemplo
import torch
# Usar índices negativos
x = torch.tensor([[1, 2, 3],
[4, 5, 6]])
# Los índices negativos se cuentan desde el final
index = torch.tensor([0, -1]) # El primer y el último elemento
y = torch.take(x, index)
print("Original:", x)
print("Índices [0, -1]:", y)
# Usar índices negativos
x = torch.tensor([[1, 2, 3],
[4, 5, 6]])
# Los índices negativos se cuentan desde el final
index = torch.tensor([0, -1]) # El primer y el último elemento
y = torch.take(x, index)
print("Original:", x)
print("Índices [0, -1]:", y)
El resultado de salida es:
原始: tensor([[1, 2, 3],
[4, 5, 6]])
索引 [0, -1]: tensor([1, 6])
Ejemplo
import torch
# Seleccionar elementos aleatoriamente
x = torch.randn(10, 10)
# Generar aleatoriamente 10 índices
index = torch.randint(0, 100, (10,))
print("Índices aleatorios:", index)
# Obtener los elementos en las posiciones correspondientes
selected = torch.take(x, index)
print("Forma del tensor original:", x.shape)
print("Forma de los elementos seleccionados:", selected.shape)
print("Elementos seleccionados:", selected)
# Seleccionar elementos aleatoriamente
x = torch.randn(10, 10)
# Generar aleatoriamente 10 índices
index = torch.randint(0, 100, (10,))
print("Índices aleatorios:", index)
# Obtener los elementos en las posiciones correspondientes
selected = torch.take(x, index)
print("Forma del tensor original:", x.shape)
print("Forma de los elementos seleccionados:", selected.shape)
print("Elementos seleccionados:", selected)
El resultado de salida es:
随机索引: 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])
Nota:torch.takeEl tensor de entrada se indexa como un tensor unidimensional aplanado. Los índices deben estar dentro del rango válido (0 a numel-1), también se pueden usar índices negativos (-1 representa el último elemento).
Otras extensiones