Función torch.slice_scatter de PyTorch
Manual de referencia de Pytorch torch
torch.slice_scatterEs una función de PyTorch que se utiliza para dispersar los valores del tensor fuente en las posiciones de un segmento del tensor de entrada.
Su efecto es equivalente ainput[dim][start:end:step] = src, pero no modifica el tensor original, sino que devuelve un tensor nuevo.
Definición de la función
torch.slice_scatterLa definición completa de la función es la siguiente:
torch.slice_scatter(input, src, dim=0, start=None, end=None, step=1)
Descripción de parámetros
La siguiente tabla enumeratorch.slice_scatterlos distintos parámetros de la función:
| Parámetro | Tipo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|---|
input | Tensor | Obligatorio | — | Tensor de entrada, es decir, el tensor a modificar. |
src | Tensor | Obligatorio | — | Tensor fuente, los valores que se van a dispersar en el slice de input,El tamaño debe coincidir con el tamaño del slice resultante.。 |
dim | int | Opcional | 0 | Dimensión en la que se dispersa. |
start | int | Opcional | None | Índice inicial (incluidoese índice), por defecto comienza en 0. |
end | int | Opcional | None | Índice final (excluidoese índice), por defecto llega hasta el final. |
step | int | Opcional | 1 | Paso, con el mismo significado que el paso (step) en los slices de Python. |
Valor de retorno
Devuelve el nuevo tensor después de la dispersión (torch.Tensor), el tensor originalinputno se modificará.
Ejemplo de uso
El siguiente ejemplo demuestratorch.slice_scatterel uso común de la función.
Ejemplo
# Crear el tensor de entrada y el tensor fuente
input = torch.zeros(8, 4)
src = torch.ones(2, 4)
# Dispersar src en las primeras dos filas de input
output = torch.slice_scatter(input, src, dim=0, end=2)
print(Tensor de entrada:)
print(input)
print("\nTensor fuente:)
print(src)
print("\nResultado de la dispersión:)
print(output)
El resultado de salida es:
输入张量:
tensor([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
源张量:
tensor([[1., 1., 1., 1.],
[1., 1., 1., 1.]])
散布结果:
tensor([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
Ejemplo
# Usar start y end para especificar el rango
input = torch.zeros(10)
src = torch.tensor([1, 2, 3])
# Dispersar src en las posiciones de los índices 2-4 de input
output = torch.slice_scatter(input, src, dim=0, start=2, end=5)
print(Entrada:, input)
print(Fuente:, src)
print(Resultado:, output)
El resultado de salida es:
输入: tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) 源: tensor([1., 2., 3.]) 结果: tensor([0., 0., 1., 2., 3., 0., 0., 0., 0., 0.])
Ejemplo
# Usar el parámetro step
input = torch.zeros(10)
src = torch.tensor([1, 2])
# Con paso de 2, desde el índice 0 hasta 4 (excluido), realmente escribe en los índices 0 y 2
output = torch.slice_scatter(input, src, dim=0, start=0, end=4, step=2)
print(Entrada:, input)
print(Fuente:, src)
print(Resultado con paso de 2:, output)
El resultado de salida es:
输入: tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) 源: tensor([1., 2.]) 步长为2的结果: tensor([1., 0., 2., 0., 0., 0., 0., 0., 0., 0.])
Nota:
torch.slice_scatterNo modifica el tensor de entrada original, sino que devuelve un tensor nuevo.Esta función es
torch.slicela operación inversa.
Otras extensiones