PyTorch torch.diagonal_scatter 関数


Pytorch torch 参考手册Pytorch torch リファレンスマニュアル

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)

出力結果は次のとおりです:

输入张量:
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)

出力結果は次のとおりです:

散布到上对角线 (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])

出力結果は次のとおりです:

输入形状: 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 参考手册Pytorch torch リファレンスマニュアル

その他の拡張