특정 index의 집합에 대한 합(시그마)연산을 간결하게 표시하는 방법
행렬, 벡터의 내적, 외적, 전치, 행렬곱 표현

A = tensor([[1,2],
[3,4]])
# Transpose
torch.einsum("ij->ji", A)
[[1,3],
[2,4]]
# Sum
torch.einsum("ij->",A)
10
torch.einsum("ij->i",A)
[3,7]
torch.einsum("ij->j",A)
[4,6]

A = tensor([0,1,2])
B = tensor([0,1,2])
# Dot Product
torch.einsum("ii->",A,B)
→ tensor(5)
# Outer Product
torch.einsum("i,j->i,j",A,B)
→ tensor([[0, 0, 0],
[0, 1, 2],
[0, 2, 4]])
# Hadamard Product
A = torch.tensor([[0,1,2],[3,4,5]])
B = torch.tensor([[0,1,2],[3,4,5]])
torch.einsum("ij,ij->ij",A,B)
→ tensor([0, 1, 4],
[9, 16, 25]])
효율적인 tensor 차원 관리 라이브러리
from einops import rearrange, reduce, repeat
3차원 이미지 (224, 124, 3)가 있다면 표현식으로 차원 순서를 재배열 할 수 있다
rearrange(images, 'h w c -> c h w')
→ (3, 224, 124)
4차원의 이미지 (3, 224, 124, 3)가 있다면 이를 ()를 활용하여서 차원끼리 묶어 줄 수 있다 , 'b h w c ->(h b) w c'
rearrange(images, 'b h w c ->(h b) w c')
→ (672, 124, 3)
임시 값을 활용하여서 정렬해줄 수도 있다
rearrange(images, 'b (h1 h) (w1 w) c -> (b h1 w1) h w c', h1=2, w1=2)
→ (12, 62, 112, 3)
4차원의 이미지 (3, 224, 224, 3)으로 구성된 이미지가 있다면
4장의 이미지가 하나의 배열로 있는것
reduce를 활용하여하나의 이미지로 축소할 수 있다
reduce(images, 'b h w c -> h w c', 'mean')
3차원의 이미지 (224, 224, 3) 이 있다면 아래와 같이 repeat를 활용해 반복연산 가능
repeat(img[0], 'h w c -> h (repeat w) c', repeat=3)
repeat(img[0], 'h w c -> h (3 w) c')
해당 경우 가로로 3번 반복된다