위클리페이퍼
PyTorch에서 텐서란 무엇이고, NumPy의 Array(배열)과 어떤 차이가 있나요?
upstack
2026. 8. 10. 00:18
PyTorch에서의 텐서란?
PyTorch에서는 0차원이든 1차원이든 100차원이든 상관없이 데이터를 담는 이 구조체를 모두 통틀어 '텐서(Tensor)'라고 부른다

차원에 따른 텐서의 이해
데이터가 얼마나 복잡하게 얽혀 있는지 차원 단위로 생각하면 이해하기 쉽습니다.
- 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에 머무릅니다.")