포스트

(CNN) Pytorch Tensor - Indexing

텐서의 다양한 인덱싱 기법과 numpy array와의 차이점까지

(CNN) Pytorch Tensor - Indexing

(CNN) Pytorch Tensor - Indexing

  • 최초 작성일: 2025년 6월 11일 (수)

indexing

파이토치 텐서의 indexing 방법은 NumPy 배열과 매우 유사하다. 단일 지정 인덱싱을 하면 원본 텐서의 차원이 하나 줄어든 텐서가 반환된다.

1
2
3
4
5
import torch

# 
ts_01 = torch.arange(0, 10).view(2, 5)
print(ts_01)

출력 결과:

1
2
tensor([[0, 1, 2, 3, 4],
        [5, 6, 7, 8, 9]])

단일 지정 인덱싱 예시:

1
2
3
print('ts_01[0, 0]:', ts_01[0, 0], 'ts_01[0, 1]:', ts_01[0, 1])
print('ts_01[1, 0]:', ts_01[1, 0], 'ts_01[1, 2]:', ts_01[1, 2])
print(ts_01[0, 0].shape, ts_01[0, 0].ndim, ts_01[0, :].shape, ts_01[0, :].ndim)

출력 결과:

1
2
3
ts_01[0, 0]: tensor(0) ts_01[0, 1]: tensor(1)
ts_01[1, 0]: tensor(5) ts_01[1, 2]: tensor(7)
torch.Size([]) 0 torch.Size([5]) 1

(slicing) indexing

슬라이싱을 사용하면 원본 텐서의 차원이 유지된다.

1
2
3
print('ts_01[0, :]은', ts_01[0, :], '\nts_01[:, 0]은', ts_01[:, 0])
print('ts_01[0, 0:3]은', ts_01[0, 0:3], '\nts_01[1, 1:4]은', ts_01[1, 1:4])
print('ts_01[:, :]\n', ts_01[:, :])

출력 결과:

1
2
3
4
5
6
7
ts_01[0, :]은 tensor([0, 1, 2, 3, 4])
ts_01[:, 0]은 tensor([0, 5])
ts_01[0, 0:3]은 tensor([0, 1, 2])
ts_01[1, 1:4]은 tensor([6, 7, 8])
ts_01[:, :]
 tensor([[0, 1, 2, 3, 4],
         [5, 6, 7, 8, 9]])

Fancy(List) indexing

Fancy indexing은 지정한 인덱스 목록을 사용해 텐서의 특정 행을 추출하는 방법이다.

1
2
3
4
5
6
7
8
9
torch.manual_seed(2025)
random_indexes = torch.randint(0, 5, size=(4,))
print('random_indexes:', random_indexes)

ts_01 = torch.rand(size=(10, 5))
print('ts_01:\n', ts_01)

ts_01_1 = ts_01[random_indexes]
print('Fancy indexing 결과 ts_01_1:\n', ts_01_1)

출력 결과:

1
2
3
4
5
random_indexes: tensor([4, 2, 4, 0])
ts_01:
 tensor([[...], [...], [...], [...], [...]])
Fancy indexing 결과 ts_01_1:
 tensor([[...], [...], [...], [...]])

Boolean indexing

Boolean indexing은 조건에 따라 원소를 선택한다. NumPy 배열과 다르게 PyTorch는 Boolean indexing 결과가 1차원 텐서로 반환된다.

1
2
3
4
5
ts_01 = torch.arange(0, 10).view(2, 5)
print(ts_01)
mask = ts_01 > 4
print(mask)
print('Boolean indexing 결과:', ts_01[mask])

출력 결과:

1
2
3
4
5
tensor([[0, 1, 2, 3, 4],
        [5, 6, 7, 8, 9]])
tensor([[False, False, False, False, False],
        [ True,  True,  True,  True,  True]])
Boolean indexing 결과: tensor([5, 6, 7, 8, 9])

torch.where

torch.where를 사용하면 원본 텐서의 차원을 유지하며 조건에 따라 값을 치환할 수 있다.

1
print(torch.where(ts_01 > 4, input=ts_01, other=torch.tensor(999)))

출력 결과:

1
2
tensor([[999, 999, 999, 999, 999],
        [  5,   6,   7,   8,   9]])

이 문서를 통해 PyTorch 텐서의 다양한 indexing 방법과 NumPy 배열과의 차이를 명확하게 이해할 수 있다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.