PyTorch torch.slice_scatter 関数


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

torch.slice_scatterPyTorch において、ソーステンソルの値を入力テンソルのスライス位置に散布するために使用される関数です。

その効果は以下と同等です。input[dim][start:end:step] = srcただし、元のテンソルは変更されず、代わりに新しいテンソルが返されます。

関数定義

torch.slice_scatterの完全な関数定義は次のとおりです。

torch.slice_scatter(input, src, dim=0, start=None, end=None, step=1)

パラメータの説明

次の表はtorch.slice_scatterの各パラメータを示しています。

パラメータ型必須かどうかデフォルト値説明
inputTensor必須—入力テンソル。つまり、変更するテンソル。
srcTensor必須—ソーステンソル。input スライスに散布する値。サイズはスライス後のサイズと一致している必要があります。。
dimintオプション0散布する次元。
startintオプションNone開始インデックス(を含むそのインデックス)。デフォルトは 0 から始まります。
endintオプションNone終了インデックス(を含まないそのインデックス)。デフォルトは末尾までです。
stepintオプション1ステップ。Python のスライスの step と同じ意味です。

戻り値

散布後の新しいテンソルを返します(torch.Tensor)。元のinputは変更されません。


使用例

以下の実例では、torch.slice_scatterの一般的な使い方を示します。

実例

import torch

# 入力テンソルとソーステンソルを作成
input = torch.zeros(8, 4)
src = torch.ones(2, 4)

# src を input の最初の2行に散布する
output = torch.slice_scatter(input, src, dim=0, end=2)

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.],
        [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.]])

実例

import torch

# start と end を使って範囲を指定
input = torch.zeros(10)
src = torch.tensor([1, 2, 3])

# src を input のインデックス 2〜4 の位置に散布する
output = torch.slice_scatter(input, src, dim=0, start=2, end=5)

print("入力:", input)
print("ソース:", src)
print("結果:", output)

出力結果は以下のとおりです。

输入: 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.])

実例

import torch

# step パラメータを使用
input = torch.zeros(10)
src = torch.tensor([1, 2])

# ステップは 2、インデックス 0 から 4 まで(4 は含まない)、実際にはインデックス 0、2 に書き込む
output = torch.slice_scatter(input, src, dim=0, start=0, end=4, step=2)

print("入力:", input)
print("ソース:", src)
print("ステップ2の結果:", output)

出力結果は以下のとおりです。

输入: 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.])

注意:torch.slice_scatter元の入力テンソルを変更せず、新しいテンソルを返します。

この関数はtorch.sliceの逆操作です。


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

その他の拡張