PyTorch eye

IT 위키

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를 사용한다.

같이 보기[편집 | 원본 편집]

참고 문헌[편집 | 원본 편집]

각주[편집 | 원본 편집]