PyTorch torch.narrow_copy 関数
torch.narrow_copyPyTorch でテンソルのスライスコピーを返すために使用される関数です。指定した次元において、開始位置から指定した長さまでのスライスのコピーを返します。
この関数はtorch.narrowの機能に似ていますが、torch.narrowビューを返すのに対し、torch.narrow_copyコピーを返します。
関数定義
torch.narrow_copy(input, dim, start, length)
パラメータ:
input(Tensor): 入力テンソル。dim(int): スライスする次元。start(int): 開始インデックス。length(int): スライスの長さ。
戻り値:
torch.Tensor: 指定されたスライス後のテンソルのコピーを返します。
使用例
例
import torch
# テンソルを作成
x = torch.tensor([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
# 最初の次元(行)で、インデックス0から2行を取得
y = torch.narrow_copy(x, dim=0, start=0, length=2)
print("元のテンソル:")
print(x)
print("nスライスコピー:")
print(y)
# コピーを変更しても元のテンソルには影響しない
y[0, 0] = 100
print("nコピー変更後、元のテンソル:", x[0, 0])
print("コピー変更後、スライスコピー:", y[0, 0])
# テンソルを作成
x = torch.tensor([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
# 最初の次元(行)で、インデックス0から2行を取得
y = torch.narrow_copy(x, dim=0, start=0, length=2)
print("元のテンソル:")
print(x)
print("nスライスコピー:")
print(y)
# コピーを変更しても元のテンソルには影響しない
y[0, 0] = 100
print("nコピー変更後、元のテンソル:", x[0, 0])
print("コピー変更後、スライスコピー:", y[0, 0])
出力結果は次の通りです:
原始张量:
tensor([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
切片副本:
tensor([[1, 2, 3, 4],
[5, 6, 7, 8]])
修改副本后,原始张量: tensor(1)
修改副本后,切片副本: tensor(100)
例
import torch
# 3Dテンソルを作成
x = torch.randn(5, 6, 7)
# 2番目の次元で、インデックス2から4つの要素を取得
y = torch.narrow_copy(x, dim=1, start=2, length=4)
print("元の形状:", x.shape)
print("スライスコピーの形状:", y.shape)
# 3Dテンソルを作成
x = torch.randn(5, 6, 7)
# 2番目の次元で、インデックス2から4つの要素を取得
y = torch.narrow_copy(x, dim=1, start=2, length=4)
print("元の形状:", x.shape)
print("スライスコピーの形状:", y.shape)
出力結果は次の通りです:
原始形状: torch.Size([5, 6, 7]) 切片副本形状: torch.Size([5, 4, 7])
注意:torch.narrow_copy返されるのはビューではなくコピーです。つまり、返されたテンソルを変更しても元のテンソルには影響しませんが、追加のメモリを消費します。独立したコピーが必要ない場合は、次を使用できます:torch.narrowを使用するとメモリを節約できます。
その他の拡張
Pytorch torch リファレンスマニュアル