머신러닝 & 딥러닝/자연어처리

파이토치 기초 텐서(Tensor) 인덱싱, 슬라이싱, 합치기(연결) - torch.index_select(), cat(), stack()

by seokii 2021. 11. 28.
728x90
반응형

이번에는 텐서(Tensor) 인덱싱, 슬라이싱, 합치기를 알아보겠습니다.

 

 

주피터 노트북으로 실습하기

In [1] : 

import torch

def describe(x):
    print("타입: {}".format(x.type()))
    print("크기: {}".format(x.shape))
    print("값: \n{}".format(x))

- 라이브러리를 불러옵니다.

- 결과 확인을 위한 간단한 함수를 정의합니다.

 

 

 

In [2] : 

x = torch.arange(9).view(3,3)
describe(x)

 

- 실습을 위해서 .arange() 함수와 .view()함수를 사용해 3*3 텐서를 만듭니다.

 

 

 

In [3] : 

describe(x[:2, :3])

In [4] : 

describe(x[1, 2])

- x[:2, :3] 기존의 파이썬과 같이 슬라이싱이 가능하다는 것을 확인할 수 있습니다.

- x[1, 2] 를 입력하여 1행 2열의 값인 5를 인덱싱 했습니다.

 

 

 

In [5] : 

index = torch.LongTensor([0, 2])
describe(torch.index_select(x, dim=1, index=index))

- 연속적이지 않은 위치를 참조하는 방법입니다.

- index 변수로 LongTensor를 선언하여 torch.index_select() 함수를 사용해 지정한 인덱스를 참조했습니다.

- dim 매개변수로 차원 변경 가능(2D 텐서는 행을 차원 0, 열을 차원 1로 표현합니다.)

 

 

In [6] : 

index = torch.LongTensor([0, 0, 1, 1])
describe(torch.index_select(x, dim=0, index=index))

- 위와 마찬가지로 LongTensor 선언 후 같은 방법으로 참조를 진행했습니다.

- 이번에는 dim 매개변수 값을 0으로 지정한 결과입니다.

 

 

 

In [7] : 

x = torch.arange(9).view(3,3)
describe(x)

- 텐서 병합(연결)을 위해서 x 변수를 재정의 했습니다.

 

 

 

In [8] : 

describe(torch.cat([x, x], dim=0))

- torch.cat() 함수를 사용해 텐서의 병합(연결)을 진행한 결과입니다.

- 마찬가지로 dim 매개변수로 차원을 설정할 수 있습니다.

 

 

 

In [9] : 

describe(torch.cat([x, x], dim=1))

- dim 매개변수의 값만 변경하여 위와 같은 코드로 진행한 결과입니다.

 

 

 

In [10] : 

describe(torch.stack([x, x]))

- torch.stack() 함수를 사용한 텐서 합치기(연결) 결과입니다.

- 단어의 의미처럼 텐서가 쌓아지는 모양으로 합쳐진 것을 확인할 수 있습니다.

 

 

 

도움이 되셨다면 아래 광고 한 번만 클릭해주세요 감사합니다!

728x90
반응형

댓글