PyTorch torch.diagonal_scatter 関数
torch.diagonal_scatterは、PyTorchにおいて値をテンソルの対角線位置に散布するための関数です。これはsrcの値をinputの指定された対角線上に散布します。
関数定義
torch.diagonal_scatter(input, src, offset=0, dim1=0, dim2=1)
引数:
input(Tensor): 入力テンソル、すなわち修正するテンソルです。src(Tensor): ソーステンソル、対角線位置に散布する値です。offset(int, オプション): 対角線のオフセット量。正の値は上対角線、負の値は下対角線、0は主対角線を表します。dim1(int, オプション): 最初の次元。デフォルトは0です。dim2(int, オプション): 2番目の次元。デフォルトは1です。
戻り値:
torch.Tensor: 修正されたテンソルを返します。
使用例
例
import torch
# 入力テンソルを作成
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3, 4])
# 値を主対角線に散布
output = torch.diagonal_scatter(input, src)
print("入力テンソル:")
print(input)
print("nソーステンソル:")
print(src)
print("n主対角線に散布:")
print(output)
# 入力テンソルを作成
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3, 4])
# 値を主対角線に散布
output = torch.diagonal_scatter(input, src)
print("入力テンソル:")
print(input)
print("nソーステンソル:")
print(src)
print("n主対角線に散布:")
print(output)
出力結果は次のとおりです:
输入张量:
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.]])
例
import torch
# 入力テンソルを作成
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3])
# 値を上対角線に散布 (offset=1)
output = torch.diagonal_scatter(input, src, offset=1)
print("上対角線に散布 (offset=1):")
print(output)
# 値を下対角線に散布 (offset=-1)
output2 = torch.diagonal_scatter(input, src, offset=-1)
print("n下対角線に散布 (offset=-1):")
print(output2)
# 入力テンソルを作成
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3])
# 値を上対角線に散布 (offset=1)
output = torch.diagonal_scatter(input, src, offset=1)
print("上対角線に散布 (offset=1):")
print(output)
# 値を下対角線に散布 (offset=-1)
output2 = torch.diagonal_scatter(input, src, offset=-1)
print("n下対角線に散布 (offset=-1):")
print(output2)
出力結果は次のとおりです:
散布到上对角线 (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.]])
例
import torch
# 3Dテンソルで対角線を使用
input = torch.zeros(3, 4, 4)
src = torch.tensor([10, 20, 30])
# 指定された2つの次元に散布
output = torch.diagonal_scatter(input, src, dim1=1, dim2=2)
print("入力形状:", input.shape)
print("ソース形状:", src.shape)
print("結果形状:", output.shape)
# 最初のバッチを確認
print("n最初のバッチの結果:")
print(output[0])
# 3Dテンソルで対角線を使用
input = torch.zeros(3, 4, 4)
src = torch.tensor([10, 20, 30])
# 指定された2つの次元に散布
output = torch.diagonal_scatter(input, src, dim1=1, dim2=2)
print("入力形状:", input.shape)
print("ソース形状:", src.shape)
print("結果形状:", output.shape)
# 最初のバッチを確認
print("n最初のバッチの結果:")
print(output[0])
出力結果は次のとおりです:
输入形状: 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.]])
注意:torch.diagonal_scatter元の入力テンソルを変更せず、代わりに新しいテンソルを返します。srcのサイズは対角線の要素数と一致する必要があります。
その他の拡張
Pytorch torch リファレンスマニュアル