view() method는 tensor의 메모리가 연속적으로 할당된 경우에만 사용 가능!

우리가 일반적으로 텐서를 지정하면 연속적 메모리를 할당하지만 텐서의 슬라이싱으로 텐서를 조작하면 비연속적인 메모리 할당이 된다. 하지만 슬라이싱에 경우
** c라는 tensor가 있을때 이 텐서가 연속적인지 비연속적인지 확인하고 싶다면
c.is_contiguous()
** 비연속적인 tensor e를 e.contiguous()를 하면 연속으로 바뀐다.
g라는 텐서가 (12,) 1차원일때 (4,3) 2차원 tensor로 바꾸고 싶다면 g.view(4,3) or g.view(4,-1)를 해주면 된다.
tensor를 평탄화 시켜주는 함수, 신경망 모델에서 많이 사용된다.
j=torch.randn([3,3])일때
j.flatten() or torch.flatten(j)를 하면 1차원 tensor로 변환된다.
** 만약 tensor가 3차원이라면 j=torch.rand([3,2,2])일때
torch.flatten(j,0)을 하면 모두 차원을 다 펼쳐서 size가 [3x2x2]이된다.
torch.flatten(j,1)을 하면 1차원부터 2차원을 펼쳐서 size가 [3,2x2]가 된다.
torch.flatten(j,0,1)을 하면 0차원에서 1차원을 펼쳐서 size가 [3x2,2]가 된다.
reshape은 view와 달리 비연속적이어도 사용가능한다.
안전하고 유연성이 좋다는 장점이 있으나 비연속적일때 아예 새로운 복사본을 할당하는 것이기 때문에 성능저하의 문제가 있다.(연속적인 텐서라면 view를 적극 활용하자!)
변경하는 방법은 view와 동일하다.
tensor의 2개의 차원 축을 바꿔주는 method이다.
2차원 텐서 q가 있을 때, q.transpose(0,1)을 하면 0번째 차원과 1번째 차원 축을 변경한다.
** transpose()와 reshape()은 엄연히 달라 reshape은 순서를 유지하면서 바꾸고 transpose는 축 자체를 바꾸기 때문에 배열 방식이 다르다.
dim 1인 특정 차원을 축소해주는 method이다.
만약 u=torch.randn(1,3,4)이면, torch.squeeze(u)를 하면 dim이 1인 0번째 차원을 축소 시킨다.
만약 u=torch.randn(1,1,4)이면, dim이 1인 차원이 2개이므로 두 차원이 모두 축소 되어 1차원이 된다.
만약 그중에 하나를 내가 골라서 축소 시키고 싶다면,
torch.squeeze(u,dim=0) or torch.squeeze(u,dim=1)
dim 1인 특정 차원을 확장해주는 method이다.
u라는 텐서가 있을때 dim 적힌 차원으로 확장시켜주는것이다.
z=torch.unsqueeze(u,dim=0)
z=torch.unsqueeze(u,dim=1)
tensor들을 결합할 때 사용하는 method이다.
만약 2차원 tensor 3개를 결합할려고 한다면 dim=0(이건 내가 지정)인 축으로 축을 생성해 결합하여 3차원 tensor를 생성한다.
각각의 tensor들의 1행1열들을 모아서 지정한 축으로 나열하면서 결합하는 형태
a=torch.stack(red,green,blue,dim=0)\

stack은 새로운 축을 생성하여 결합하는 것이지만 cat은 기존의 차원을 유지하면서 tensor를 연결한다. 연결할 2 tensor는 차원이 같아야 한다.
a=torch.tensor([[1,2]]) , b=torch.tensor([[1,2],[3,4]])
torch.cat((a,b),dim=0)
** cat 함수를 쓸때 연결되는 행이나 열을 맞춰줘야 한다.
torch.cat((a.reshape(2,1),b),dim=1)
tensor의 크기를 확장하고 싶을 때
f=torch.tensor([[1,2,3]])인 2차원 텐서를
f.expand(4,3)하면 (1,3)에서 크기가 (4,3)으로 확장된다.

** 단 expand method는 텐서 차원 중 하나의 크기가 1이어야 사용 가능하다.
expand와 달리 제약이 없고, tensor들의 요소를 반복해서 크기를 확장
하지만 메모리를 추가 할당하기 때문에 메모리 효율성이 떨어진다.
ex) i=h.repeat(2,3)
