<jupyter_start><jupyter_text>What is PyTorch?  Getting Started   Tensors  Tensor는 numpy의 ndarray와 비슷하다. 그리고 GPU를 사용해서 Tensor 계산을 더 빨리 할 수 있다.<jupyter_code>from __future__ import print_function
import torch<jupyter_output><empty_output><jupyter_text>(5, 3) 크기의 초기화 되지 않은 행렬을 만들기 위해서는<jupyter_code>x = torch.Tensor(5, 3)
print(x)<jupyter_output>0.0000e+00 -4.6566e-10 -1.2407e+20
-2.5250e-29  1.8217e-44  0.0000e+00
 0.0000e+00  0.0000e+00  0.0000e+00
 3.6013e-43  7.7052e+31  7.2148e+22
 2.5226e-18  4.2245e-05  1.0072e-11
[torch.FloatTensor of size 5x3]<jupyter_text>(5, 3) 크기의 무작위로 초기화 된 행렬을 만들기 위해서는<jupyter_code>x = torch.rand(5, 3)
print(x)<jupyter_output>0.4253  0.7813  0.0976
 0.8812  0.4502  0.3042
 0.4967  0.4156  0.2947
 0.2151  0.3238  0.9956
 0.8027  0.7387  0.1563
[torch.FloatTensor of size 5x3]<jupyter_text>만들어진 행렬의 크기를 구하기 위해서는<jupyter_code>print(x.size())<jupyter_output>torch.Size([5, 3])<jupyter_text>`torch.Size`는 사실 tuple이고 tuple과 같은 연산을 지원한다.  Operations  Tensor 계산에 대한 많은 형식이 존재한다. 덧셈 : 방법 1<jupyter_code>y = torch.rand(5, 3)
print(x + y) # 위에 있는 변수 x를 사용한다.<jupyter_output>0.7733  1.0196  1.0050
 1.0154  1.3472  0.6614
 1.0378  1.1202  1.2399
 0.6785  1.1107  1.3830
 1.5120  0.7860  0.4203
[torch.FloatTensor of size 5x3]<jupyter_text>덧셈 : 방법 2<jupyter_code>print(torch.add(x, y))<jupyter_output>0.7733  1.0196  1.0050
 1.0154  1.3472  0.6614
 1.0378  1.1202  1.2399
 0.6785  1.1107  1.3830
 1.5120  0.7860  0.4203
[torch.FloatTensor of size 5x3]<jupyter_text>덧셈 : 결과값을 다른 변수에 할당하기<jupyter_code>result = torch.Tensor(5, 3)
torch.add(x, y, out=result)
print(result)<jupyter_output>0.7733  1.0196  1.0050
 1.0154  1.3472  0.6614
 1.0378  1.1202  1.2399
 0.6785  1.1107  1.3830
 1.5120  0.7860  0.4203
[torch.FloatTensor of size 5x3]<jupyter_text>덧셈 : += 와 같은 형식의 방법<jupyter_code>y.add_(x)
print(y)<jupyter_output>0.7733  1.0196  1.0050
 1.0154  1.3472  0.6614
 1.0378  1.1202  1.2399
 0.6785  1.1107  1.3830
 1.5120  0.7860  0.4203
[torch.FloatTensor of size 5x3]<jupyter_text>`_`라는 기호가 메서드 뒤에 붙어있다면 해당 메서드를 호출한 객체의 값을 바꾸는 일을 한다. 예를 들면, `x.copy_(y)`나 `x.t_()`은 `x`의 값을 바꾼다.  numpy스러운 indexing도 Tensor에서 지원을 한다.<jupyter_code>print(x[:, 1])<jupyter_output>0.7813
 0.4502
 0.4156
 0.3238
 0.7387
[torch.FloatTensor of size 5]<jupyter_text>특정 tensor의 크기를 바꾸고 싶다면, `torch.view`라는 메서드를 이용할 수 있다.<jupyter_code>x = torch.rand(4, 4)
y = x.view(16)
z = x.view(-1, 8) # -1은 다른 인자들을 보고 이 위치의 값을 추론하겠다는 의미이다.
print(x.size(), y.size(), z.size())<jupyter_output>torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])<jupyter_text>이외에 Tensor를 이용한 많은 계산 방법에 대해서는 http://pytorch.org/docs/master/torch.html 를 참조하자.   Numpy Bridge pytorch의 Tensor에서 numpy의 ndarray로 혹은 그 반대로의 변환이 자유자재로 가능하다.  Converting torch Tensor to numpy Array<jupyter_code>a = torch.ones(5)
print(a)
b = a.numpy()
print(b)<jupyter_output>[ 1.  1.  1.  1.  1.]<jupyter_text>이렇게 만들어진 a와 b는 둘 중 하나가 바뀌면 둘 다 바뀌게 된다.<jupyter_code>a.add_(1)
print(a)
print(b)<jupyter_output>2
 2
 2
 2
 2
[torch.FloatTensor of size 5]

[ 2.  2.  2.  2.  2.]<jupyter_text>Converting numpy Array to torch Tensor<jupyter_code>import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)<jupyter_output>[ 2.  2.  2.  2.  2.]

 2
 2
 2
 2
 2
[torch.DoubleTensor of size 5]<jupyter_text>이 방법도 둘 중 하나가 값이 바뀌면 둘 다 값이 바뀌게 된다. CPU에서 돌아가는 **Tensor들 중에서 CharTensor를 제외하고는** 모두가 Numpy의 ndarray와의 변환이 자유롭다.  CUDA Tensors CPU에서 돌아가는 Tensor는 `cuda`메서드를 이용해서 GPU로 옮길 수 있다.<jupyter_code>if torch.cuda.is_available():
    x = x.cuda()
    y = y.cuda()
    x + y<jupyter_output><empty_output>
StarcoderdataJupyterStructuredCleanDedup