위클리페이퍼

PyTorch에서 텐서란 무엇이고, NumPy의 Array(배열)과 어떤 차이가 있나요?

upstack 2026. 8. 10. 00:18

PyTorch에서의 텐서란?

PyTorch에서는 0차원이든 1차원이든 100차원이든 상관없이 데이터를 담는 이 구조체를 모두 통틀어 '텐서(Tensor)'라고 부른다

 

[출처] - AI(gemini)에서 제공한 이미지

차원에 따른 텐서의 이해

데이터가 얼마나 복잡하게 얽혀 있는지 차원 단위로 생각하면 이해하기 쉽습니다.

  • 0차원 (스칼라, Scalar): 단순한 숫자 하나입니다. 방향은 없고 크기만 있습니다. (예: 7)
  • 1차원 (벡터, Vector): 숫자를 일렬로 나열한 '선'입니다. (예: [1, 2, 3])
  • 2차원 (행렬, Matrix): 숫자를 가로세로 표 형태로 나열한 '면'입니다. 일반적인 엑셀 데이터나 흑백 이미지가 여기에 해당합니다.
  • 3차원 이상 (텐서, Tensor): 2차원 행렬이 여러 장 겹친 큐브(입체) 형태입니다. 컬러 이미지(가로, 세로, RGB 색상 채널)나 비디오 데이터가 이런 고차원 구조를 가집니다.

PyTorch Tensor vs. NumPy Array 비교

PyTorch의 텐서는 형태와 사용법 면에서 NumPy의 ndarray(배열)와 매우 유사합니다. 하지만 딥러닝 연산에 특화된 두 가지 결정적인 차이점이 있습니다.

비교 항목 PyTorch Tensor NumPy Array (ndarray)
주요 연산 장치 CPU, GPU, TPU CPU 전용
자동 미분 (Autograd) 지원 (requires_grad=True) 미지원
주요 목적 딥러닝 모델 학습 및 신경망 연산 일반적인 수치 해석 및 데이터 분석
메모리 할당 위치 기기(Device) 메모리에 명시적 할당 가능 시스템(Host) 메모리에 고정

 


샘플 코드

import torch
import numpy as np

# ----------------------------------------------------
# 1. 차원(Dimension)별 텐서 생성
# ----------------------------------------------------
# 0차원 (스칼라: 값 1개)
scalar = torch.tensor(7)                  

# 1차원 (벡터: 1차원 배열)
vector = torch.tensor([1, 2, 3])          

# 2차원 (행렬: 2x2 구조)
matrix = torch.tensor([[1, 2], [3, 4]])   

# 3차원 (텐서: 2x2 구조가 2개 겹친 형태)
tensor_3d = torch.tensor([
    [[1, 2], [3, 4]], 
    [[5, 6], [7, 8]]
]) 

# 텐서의 형태(.shape)와 차원 크기(.dim()) 확인
print("--- 텐서 차원 확인 ---")
print(f"스칼라 차원: {scalar.dim()}D, 형태: {scalar.shape}")
print(f"벡터   차원: {vector.dim()}D, 형태: {vector.shape}")
print(f"행렬   차원: {matrix.dim()}D, 형태: {matrix.shape}")
print(f"3차원  차원: {tensor_3d.dim()}D, 형태: {tensor_3d.shape}\n")

# ----------------------------------------------------
# 2. 자주 쓰이는 텐서 자동 생성 함수
# ----------------------------------------------------
# 3x4 크기의 0으로 채워진 텐서
zeros_tensor = torch.zeros(3, 4)  

# 2x3 크기의 0~1 사이 무작위 난수 텐서
rand_tensor = torch.rand(2, 3)    

print("--- 난수 텐서 ---")
print(rand_tensor, "\n")

# ----------------------------------------------------
# 3. NumPy 배열과 텐서 간의 상호 변환
# ----------------------------------------------------
np_array = np.array([10, 20, 30])
print("NumPy 배열:", type(np_array))

# NumPy 배열을 PyTorch 텐서로 변환
torch_from_np = torch.from_numpy(np_array)
print("변환된 텐서:", type(torch_from_np))

# PyTorch 텐서를 다시 NumPy 배열로 변환
back_to_np = torch_from_np.numpy()
print("다시 NumPy로:", type(back_to_np), "\n")

# ----------------------------------------------------
# 4. GPU(CUDA)로 텐서 이동하기
# ----------------------------------------------------
# 현재 환경에서 GPU(CUDA)를 사용할 수 있는지 확인
if torch.cuda.is_available():
    device = torch.device("cuda")
    # 텐서를 GPU 메모리로 복사
    gpu_tensor = vector.to(device)
    print("GPU 텐서 정보:", gpu_tensor)
else:
    print("현재 환경에서는 GPU를 사용할 수 없어 CPU에 머무릅니다.")