본문 바로가기
CVLab/모두의 딥러닝

Lab_01: Tensor Manipulation

by kkkkk1023 2025. 1. 3.

PyTorch로  Tensor 생성하기

1차원 Tensor

t = torch.FloatTensor([0,1,2,3,4,5,6])
# tensor([0., 1., 2., 3., 4., 5., 6.])

 

2차원 Tensor

t = torch.FloatTensor([[1, 2, 3],
                       [4, 5, 6],
                       [7, 8, 9],
                       [10, 11, 12]])
# tensor([[ 1.,  2.,  3.],
#         [ 4.,  5.,  6.],
#         [ 7.,  8.,  9.],
#         [10., 11., 12.]])

 

 

 

Multiplication vs Matrix Multiplication

m1 = torch.FloatTensor([[1, 2], [3, 4]])
m2 = torch.FloatTensor([[1], [2]])

m1.matmul(m2)
# tensor([[ 5.],
#         [11.]])


m1 * m2
# tensor([[1., 2.],
#         [6., 8.]])

 

 

 

 

Mean

t = torch.FloatTensor([[1, 2], [3, 4]])


t.mean() # 모든 요소 -> tensor(2.5000)

t.mean(dim=0) # 행끼리 -> tensor([2., 3.])

t.mean(dim=1) # 열끼리 -> tensor([1.5000, 3.5000])

t.mean(dim=-1) # 가장 마지막 차원끼리 -> tensor([1.5000, 3.5000])

 

 

 

 

Sum

t = torch.FloatTensor([[1, 2], [3, 4]])


t.sum() # 모든 요소 -> tensor(10)

t.sum(dim=0) # 행끼리 -> tensor([4., 6.])

t.sum(dim=1) # 열끼리 -> tensor([3., 7.])

t.sum(dim=-1) # 가장 마지막 차원끼리 -> tensor([3., 7.])

 

 

 

 

Max and Argmax

t = torch.FloatTensor([[1, 2], [3, 4]])

t.max() # 요소들 중 가장 큰 값
# tensor(4.)

t.max(dim=0) # 행들 중에서 가장 큰 행의 값과 인덱스
# torch.return_types.max(
# tvalues=tensor([3., 4.]),
# tindices=tensor([1, 1]))

t.max(dim=1) # 열들 중에서 가장 큰 열의 값과 인덱스
# torch.return_types.max(
# values=tensor([2., 4.]),
# indices=tensor([1, 1]))

 

 

 

 

View (Reshape): 형태 변경

t = np.array([[[0, 1, 2],
               [3, 4, 5]],
              
              [[6, 7, 8],
               [9, 10, 11]]])
ft = torch.FloatTensor(t)
ft.shape # torch.Size([2, 2, 3])


ft.view([-1, 3]) # 두번 째 차원의 개수는 3으로 고정
# tensor([[ 0.,  1.,  2.],
#         [ 3.,  4.,  5.],
#         [ 6.,  7.,  8.],
#         [ 9., 10., 11.]])


ft.view([-1, 1, 3]) # 두번 째 차원의 개수는 1, 세번 째 차원의 개수는 3으로 고정
# tensor([[[ 0.,  1.,  2.]],

#         [[ 3.,  4.,  5.]],

#         [[ 6.,  7.,  8.]],

#         [[ 9., 10., 11.]]])

 

 

 

 

squeeze(차원 제거)와 unsqueeze(차원 추가)

ft = torch.FloatTensor([[0], [1], [2]])
ft.shape # torch.Size([3, 1])

ft.squeeze() # 요소가 1인 dim의 차원을 제거
ft.squeeze().shape # torch.Size([3])


ft.unsqueeze(0) # 첫 번째 dim에 차원 추가
ft.unsqueeze(0).shape # torch.Size([1, 3, 1])

ft.unsqueeze(1) # 두 번째 dim에 차원 추가
ft.unsqueeze(1).shape # torch.Size([3, 1, 1])

 

 

 

 


Concatenate(병합 - 기존 차원 유지)

 

 

 

Stacking(병합 - 기존 차원 + 1)

 

 

 

 

Ones and Zeors

 

 

 

 

In-place Operation(기존 텐서도 변경)