Función torch.slice_scatter de PyTorch


Pytorch torch 参考手册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ámetroTipoObligatorioValor predeterminadoDescripción
inputTensorObligatorio—Tensor de entrada, es decir, el tensor a modificar.
srcTensorObligatorio—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.。
dimintOpcional0Dimensión en la que se dispersa.
startintOpcionalNoneÍndice inicial (incluidoese índice), por defecto comienza en 0.
endintOpcionalNoneÍndice final (excluidoese índice), por defecto llega hasta el final.
stepintOpcional1Paso, 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

import torch

# 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

import torch

# 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

import torch

# 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 estorch.slicela operación inversa.


Pytorch torch 参考手册Manual de referencia de Pytorch torch

Otras extensiones