PyTorch

PyTorch Tensor 생성 및 조작

PyExplorer 2025. 4. 3. 11:12
728x90

PyTorch Tensor 생성 및 조작

PyTorch는 딥러닝 및 데이터 과학 분야에서 널리 사용되는 라이브러리로, 강력한 텐서(Tensor) 연산 기능을 제공합니다. 텐서는 다차원 배열 구조로, NumPy 배열과 유사하지만 GPU 가속을 지원하는 것이 특징입니다. 본 포스팅에서는 PyTorch의 Tensor 생성 방법과 다양한 조작 기법에 대해 설명합니다.

1. Tensor 생성

PyTorch에서는 다양한 방법으로 Tensor를 생성할 수 있습니다. 기본적인 생성 방법을 살펴보겠습니다.

1.1 torch.tensor()를 이용한 생성

기존 리스트 또는 NumPy 배열을 사용하여 Tensor를 생성할 수 있습니다.

import torch
import numpy as np

# 리스트로부터 Tensor 생성
t1 = torch.tensor([1, 2, 3, 4, 5])
print(t1)

# NumPy 배열로부터 Tensor 생성
np_array = np.array([6, 7, 8, 9, 10])
t2 = torch.tensor(np_array)
print(t2)

1.2 torch.zeros(), torch.ones(), torch.full(), torch.arange()를 이용한 생성

특정 값으로 초기화된 Tensor를 생성할 수도 있습니다.

# 3x3 크기의 0으로 초기화된 Tensor 생성
t3 = torch.zeros(3, 3)
print(t3)

# 2x4 크기의 1로 초기화된 Tensor 생성
t4 = torch.ones(2, 4)
print(t4)

# 2x3 크기의 모든 요소를 7로 초기화한 Tensor 생성
t5 = torch.full((2, 3), 7)
print(t5)

# 특정 범위의 값으로 구성된 Tensor 생성
t6 = torch.arange(1, 10, 2)  # 1부터 10까지 2씩 증가
print(t6)

1.3 torch.rand(), torch.randn(), torch.randint()를 이용한 난수 Tensor 생성

PyTorch는 무작위 값을 갖는 Tensor를 생성하는 다양한 함수를 제공합니다.

# 2x3 크기의 [0,1) 범위에서 균등 분포를 따르는 난수 Tensor 생성
t7 = torch.rand(2, 3)
print(t7)

# 2x3 크기의 평균 0, 표준편차 1인 정규 분포를 따르는 난수 Tensor 생성
t8 = torch.randn(2, 3)
print(t8)

# 2x2 크기의 0부터 10 사이의 정수 난수 Tensor 생성
t9 = torch.randint(0, 10, (2, 2))
print(t9)

2. Tensor 조작

생성된 Tensor는 다양한 연산을 통해 조작할 수 있습니다. 여기서는 기본적인 변형, 인덱싱, 연산 등을 다룹니다.

2.1 Tensor의 형태 변경 (reshape(), view())

Tensor의 크기(shape)를 변경할 수 있습니다.

# 3x3 크기의 0으로 초기화된 Tensor 생성
t10 = torch.zeros(3, 3)

# 1차원으로 변환
t11 = t10.view(9)
print(t11)

# 3x3을 1x9 형태로 변환
t12 = t10.reshape(1, 9)
print(t12)

2.2 Tensor의 차원 변경 (unsqueeze(), squeeze())

unsqueeze()squeeze()를 사용하여 차원을 추가하거나 제거할 수 있습니다.

# 1차원 Tensor 생성
t13 = torch.tensor([1, 2, 3])

# 차원 추가
t14 = t13.unsqueeze(0)  # (1,3) 형태
print(t14.shape)

# 차원 제거
t15 = t14.squeeze()  # 다시 (3,) 형태
print(t15.shape)

2.3 Tensor의 인덱싱 및 슬라이싱

NumPy와 유사하게 Tensor에서도 인덱싱과 슬라이싱이 가능합니다.

# 3x3 Tensor 생성
t16 = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 특정 요소 접근
print(t16[0, 2])  # 첫 번째 행, 세 번째 열의 값

# 특정 행 접근
print(t16[1, :])  # 두 번째 행 전체

# 특정 열 접근
print(t16[:, 1])  # 두 번째 열 전체

2.4 Tensor 연산

Tensor 간 기본적인 연산도 지원됩니다.

# 두 개의 Tensor 생성
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])

# 덧셈
print(a + b)

# 뺄셈
print(a - b)

# 곱셈
print(a * b)

# 나눗셈
print(a / b)

# 행렬 곱셈
a_mat = torch.tensor([[1, 2], [3, 4]])
b_mat = torch.tensor([[5, 6], [7, 8]])
print(torch.mm(a_mat, b_mat))  # 행렬 곱

3. 결론

이번 포스팅에서는 PyTorch에서 Tensor를 생성하는 다양한 방법과 기본적인 조작 방법에 대해 알아보았습니다. Tensor는 딥러닝 모델의 핵심 데이터 구조이며, PyTorch의 강력한 연산 기능을 활용하여 다양한 작업을 수행할 수 있습니다.

728x90