PyTorch torch.slice_scatter 関数
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の各パラメータを示しています。
| パラメータ | 型 | 必須かどうか | デフォルト値 | 説明 |
|---|---|---|---|---|
input | Tensor | 必須 | — | 入力テンソル。つまり、変更するテンソル。 |
src | Tensor | 必須 | — | ソーステンソル。input スライスに散布する値。サイズはスライス後のサイズと一致している必要があります。。 |
dim | int | オプション | 0 | 散布する次元。 |
start | int | オプション | None | 開始インデックス(を含むそのインデックス)。デフォルトは 0 から始まります。 |
end | int | オプション | None | 終了インデックス(を含まないそのインデックス)。デフォルトは末尾までです。 |
step | int | オプション | 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)
# 入力テンソルとソーステンソルを作成
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)
# 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)
# 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 リファレンスマニュアル