PyTorch torch.select 関数
torch.selectPyTorch において、指定した次元に沿ってインデックスに対応するスライスを選択するための関数です。指定した次元上の特定のインデックス位置にあるスライスのビューを返します。
関数定義
torch.select(input, dim, index)
パラメータ:
input(Tensor): 入力テンソル。dim(int): 選択する次元。index(int): 選択するインデックス。
戻り値:
torch.Tensor: 指定したインデックス位置のスライスを返します(次元が1つ減ります)。
使用例
例
import torch
# 3x4のテンソルを作成
x = torch.tensor([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
# 最初の次元(行)のインデックス1の行を選択
y = torch.select(x, dim=0, index=1)
print("元のテンソル:")
print(x)
print("\nインデックス1の行を選択:")
print(y)
# 3x4のテンソルを作成
x = torch.tensor([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
# 最初の次元(行)のインデックス1の行を選択
y = torch.select(x, dim=0, index=1)
print("元のテンソル:")
print(x)
print("\nインデックス1の行を選択:")
print(y)
出力結果は次のとおりです:
原始张量:
tensor([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
选择索引1的行:
tensor([5, 6, 7, 8])
例
import torch
# 3Dテンソルを作成
x = torch.arange(24).reshape(2, 3, 4)
print("元の3Dテンソル:")
print(x)
print("形状:", x.shape)
# 最初の次元(batch)のインデックス0の要素を選択
y = torch.select(x, dim=0, index=0)
print("\ndim=0, index=0 を選択:")
print(y)
print("形状:", y.shape)
# 3Dテンソルを作成
x = torch.arange(24).reshape(2, 3, 4)
print("元の3Dテンソル:")
print(x)
print("形状:", x.shape)
# 最初の次元(batch)のインデックス0の要素を選択
y = torch.select(x, dim=0, index=0)
print("\ndim=0, index=0 を選択:")
print(y)
print("形状:", y.shape)
出力結果は次のとおりです:
原始3D张量:
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
形状: torch.Size([2, 3, 4])
选择 dim=0, index=0:
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
形状: torch.Size([3, 4])
例
import torch
# 負のインデックスを使用
x = torch.tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 最後の行を選択する同等の方法
y = torch.select(x, dim=0, index=-1)
print("元のテンソル:")
print(x)
print("\n最後の行を選択 (index=-1):")
print(y)
# 負のインデックスを使用
x = torch.tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 最後の行を選択する同等の方法
y = torch.select(x, dim=0, index=-1)
print("元のテンソル:")
print(x)
print("\n最後の行を選択 (index=-1):")
print(y)
出力結果は次のとおりです:
原始张量:
tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
选择最后一行 (index=-1):
tensor([7, 8, 9])
注意:torch.select返されるのはコピーではなくビューであるため、操作は効率的です。同様の機能はスライス操作を使用して実現することもできます。例:x[index] 或 x[index:index+1]。
その他の拡張
Pytorch torch リファレンスマニュアル