이상한 pytorch3: 행은 a만큼, 열은 b만큼 반복하시오!

ddang ddang ball·2022년 9월 27일
0

파이토치

목록 보기
3/6
post-thumbnail

오늘 공부하다가 이상한 함수를 알아냈다.

import torch
torch.meshgrid() ???

일단 저기다 집어 넣으려면 2개의 1차원 텐서가 필요하다.

a = torch.tensor([1, 2, 3])
b = torch.tensor([0])
c = torch.meshgrid(a, b)

이렇게하면
(tensor([[1], [2], [3]]), tensor([[0], [0], [0]]))
이런 식으로 신기하게. 3행 1열의 텐서가 튜플로 묶여서 나온다.

그리고

d = torch.meshgrid(a, b)

이런식으로 하면 또 다른 결과가 나온다.
(tensor([[0, 0, 0]]), tensor([[1, 2, 3]]))
1행 3열의 텐서가 튜플로 묶여서 나온다.

a = torch.tensor([1, 2, 3])
b = torch.tensor([0, 0])
c = torch.meshgrid(a, b)

이번에는 0을 2개로 붙여보자!
재밌는 것이 나온다!
(tensor([[1, 1], [2, 2], [3, 3]]), tensor([[0, 0], [0, 0], [0, 0]]))

이렇게 신기하게 나온다!
3개의 원소의 텐서와 2개의 원소의 텐서가 만나서
3행 2열의 텐서가 튜플로 나온다!

이걸 반대로 하면?? 그렇다! 2행 3열의 텐서가 튜플로 묶여서 나온다!

d = torch.meshgrid(b, a)

(tensor([[0, 0, 0], [0, 0, 0]]), tensor([[1, 2, 3], [1, 2, 3]]))

텐서 a의 원소가 5개, 텐서 b의 원소가 3개라면
torch.meshgrid(a, b)를 하면 5행 3열의 텐서가 나오고
torch.meshgrid(b, a)를 하면 3행 5열의 텐서가 나올것이다!
그리고 반복된 원소가 생겨날 거라 기대한다.

a = torch.tensor([1, 2, 3, 4, 5])
b = torch.tensor([0, 0, 0])

c = torch.meshgrid(a, b)
d = torch.meshgrid(a, b)

이러면 c는
(tensor([[1, 1, 1], [2, 2, 2], [3, 3, 3], [4, 4, 4], [5, 5, 5]]),
tensor([[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]))
이 되고

d는
(tensor([[1, 2 ,3 ,4, 5], [1, 2 ,3 ,4, 5], [1, 2 ,3 ,4, 5]]), tensor([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]))

+어디다가 쓸까?
서로 다른 2개의 텐서를 행과 열로 확장한 다음 torch.stack()으로 합쳐버리는 용도로 사용하는거 같다.

profile
배우고 싶은것은 많으나 용두사미인 사람.

0개의 댓글