PyTorch torch.narrow_copy 関数


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

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])

出力結果は次の通りです:

原始张量:
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)

出力結果は次の通りです:

原始形状: torch.Size([5, 6, 7])
切片副本形状: torch.Size([5, 4, 7])

注意:torch.narrow_copy返されるのはビューではなくコピーです。つまり、返されたテンソルを変更しても元のテンソルには影響しませんが、追加のメモリを消費します。独立したコピーが必要ない場合は、次を使用できます:torch.narrowを使用するとメモリを節約できます。


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

その他の拡張