torch.eye(영어: eye)은 주대각선이 1이고 나머지가 0인 2차원 텐서(단위 행렬)를 생성하는 PyTorch의 함수이다.
개요
torch.eye는 크기n×m(m미지정 시n×n)의 단위 행렬을 반환한다.- 반환 텐서는 기본적으로 밀집(dense) 레이아웃이며, 주대각선 원소는 1, 그 외는 0이다.
시그니처
torch.eye(n, m=None, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
매개변수
n: 행(row) 수.m: 열(column) 수. 생략하면n과 동일한 정사각 행렬을 생성.dtype: 반환 텐서의 자료형.layout: 기본값은torch.strided(밀집). 희소 레이아웃은 지원되지 않는다.device: 생성할 장치(CPU/CUDA 등).requires_grad: 자동미분 기록 여부.
사용 예시
import torch
# 3×3 단위 행렬 (float32, CPU)
I = torch.eye(3)
# 4×2 '직사각' 단위 행렬 (대각선 길이는 min(4,2)=2)
R = torch.eye(4, 2)
# dtype / device 지정
I64 = torch.eye(5, dtype=torch.int64, device='cpu')
print(I)
print(R)
배치 단위 행렬 생성
import torch
n = 4
batch = 3
# 방법 1) diag_embed로 배치 단위 행렬 만들기
ones = torch.ones(batch, n) # 각 배치마다 길이 n의 1 벡터
I_batched = torch.diag_embed(ones) # (batch, n, n)
# 방법 2) eye를 확장 (메모리 관점 주의)
I_batched2 = torch.eye(n).expand(batch, n, n)
희소(sparse)와의 관계
torch.eye는 밀집 텐서를 생성하며,layout에 희소를 지정하는 것은 공식적으로 지원되지 않는다.- 희소 단위 행렬이 필요하면 COO 인덱스와 값을 사용해 직접 생성해야 한다.
import torch
def sparse_eye(n, device=None, dtype=None):
idx = torch.arange(n, device=device)
indices = torch.stack([idx, idx]) # 2×n
values = torch.ones(n, device=device, dtype=dtype)
return torch.sparse_coo_tensor(indices, values, (n, n))
S = sparse_eye(5)
관련 함수
torch.diagonal: 텐서의 대각 성분을 뷰(view)로 반환.torch.diag_embed: 벡터(또는 배치 벡터)를 대각 성분으로 갖는 행렬(또는 배치 행렬) 생성.torch.diagonal_scatter: 주어진 입력의 대각 위치에 소스 값을 삽입.
주의 사항
torch.eye는 2차원 텐서를 반환한다(스칼라/벡터/고차 텐서 아님).- 희소 레이아웃(
torch.sparse_coo등)로 직접 생성하려면torch.sparse_coo_tensor를 사용한다.
같이 보기
참고 문헌
- torch.eye — PyTorch 문서
- torch.eye not supported for sparse layout — GitHub 이슈 #46705
- torch.diagonal — PyTorch 문서
- torch.diag_embed — PyTorch 문서
- torch.diagonal_scatter — PyTorch 문서