Función torch.diagonal_scatter de PyTorch
Manual de referencia de Pytorch torch
torch.diagonal_scatterEs una función en PyTorch que se utiliza para esparcir valores en las posiciones diagonales de un tensor. Estasrcesparce los valores deinputen la diagonal especificada de
Definición de la función
torch.diagonal_scatter(input, src, offset=0, dim1=0, dim2=1)
Parámetros:
input(Tensor): El tensor de entrada, es decir, el tensor que se va a modificar.src(Tensor): El tensor fuente, los valores que se van a esparcir en las posiciones diagonales.offset(int, opcional): Desplazamiento diagonal. Un valor positivo indica la diagonal superior, un valor negativo indica la diagonal inferior, y 0 indica la diagonal principal.dim1(int, opcional): La primera dimensión, el valor predeterminado es 0.dim2(int, opcional): La segunda dimensión, el valor predeterminado es 1.
Valor de retorno:
torch.Tensor: Devuelve el tensor modificado.
Ejemplo de uso
Ejemplo
import torch
# Crear el tensor de entrada
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3, 4])
# Esparcir los valores en la diagonal principal
output = torch.diagonal_scatter(input, src)
print("Tensor de entrada:")
print(input)
print("nTensor fuente:")
print(src)
print("nEsparcido en la diagonal principal:")
print(output)
# Crear el tensor de entrada
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3, 4])
# Esparcir los valores en la diagonal principal
output = torch.diagonal_scatter(input, src)
print("Tensor de entrada:")
print(input)
print("nTensor fuente:")
print(src)
print("nEsparcido en la diagonal principal:")
print(output)
El resultado es:
输入张量:
tensor([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
源张量:
tensor([1, 2, 3, 4])
散布到主对角线:
tensor([[1., 0., 0., 0.],
[0., 2., 0., 0.],
[0., 0., 3., 0.],
[0., 0., 0., 4.]])
Ejemplo
import torch
# Crear el tensor de entrada
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3])
# Esparcir los valores en la diagonal superior (offset=1)
output = torch.diagonal_scatter(input, src, offset=1)
print("Esparcido en la diagonal superior (offset=1):")
print(output)
# Esparcir los valores en la diagonal inferior (offset=-1)
output2 = torch.diagonal_scatter(input, src, offset=-1)
print("nEsparcido en la diagonal inferior (offset=-1):")
print(output2)
# Crear el tensor de entrada
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3])
# Esparcir los valores en la diagonal superior (offset=1)
output = torch.diagonal_scatter(input, src, offset=1)
print("Esparcido en la diagonal superior (offset=1):")
print(output)
# Esparcir los valores en la diagonal inferior (offset=-1)
output2 = torch.diagonal_scatter(input, src, offset=-1)
print("nEsparcido en la diagonal inferior (offset=-1):")
print(output2)
El resultado es:
散布到上对角线 (offset=1):
tensor([[0., 1., 0., 0.],
[0., 0., 2., 0.],
[0., 0., 0., 3.],
[0., 0., 0., 0.]])
散布到下对角线 (offset=-1):
tensor([[0., 0., 0., 0.],
[1., 0., 0., 0.],
[0., 2., 0., 0.],
[0., 0., 3., 0.]])
Ejemplo
import torch
# Usar la diagonal en un tensor 3D
input = torch.zeros(3, 4, 4)
src = torch.tensor([10, 20, 30])
# Esparcir en las dos dimensiones especificadas
output = torch.diagonal_scatter(input, src, dim1=1, dim2=2)
print("Forma de entrada:", input.shape)
print("Forma de la fuente:", src.shape)
print("Forma del resultado:", output.shape)
# Ver el primer batch
print("nResultado del primer batch:")
print(output[0])
# Usar la diagonal en un tensor 3D
input = torch.zeros(3, 4, 4)
src = torch.tensor([10, 20, 30])
# Esparcir en las dos dimensiones especificadas
output = torch.diagonal_scatter(input, src, dim1=1, dim2=2)
print("Forma de entrada:", input.shape)
print("Forma de la fuente:", src.shape)
print("Forma del resultado:", output.shape)
# Ver el primer batch
print("nResultado del primer batch:")
print(output[0])
El resultado es:
输入形状: torch.Size([3, 4, 4])
源形状: torch.Size([3])
结果形状: torch.Size([3, 4, 4])
第一个batch的结果:
tensor([[10., 0., 0., 0.],
[0., 20., 0., 0.],
[0., 0., 30., 0.],
[0., 0., 0., 0.]])
Nota:torch.diagonal_scatterNo modifica el tensor de entrada original, sino que devuelve un nuevo tensor.srcEl tamaño de ... debe coincidir con el número de elementos de la diagonal.
Otras extensiones