
626
4
밑바닥부터 구현하는 딥러닝
>>> (a + b).mean().item()
9.666666984558105
두 텐서의 모양이 같기만 하다면 요소별 연산을 언제든지 사용할 수 있습니다.
>>> m = tensor([[1., 2, 3], [4,5,6], [7,8,9]])
>>> m*m
tensor([[ 1., 4., 9.],
[16., 25., 36.],
[49., 64., 81.]])
그러나 두 텐서의 모양이 같지 않다면 (다음 절에서 볼 브로드캐스팅을 적용하지 않는 한) 요
소별 연산은 불가능합니다.
>>> n = tensor([[1., 2, 3], [4,5,6]])
>>> m*n
RuntimeError: The size of tensor a (3) must match the size of tensor b (2) at
dimension 0
세 중첩 반복문 중 하나는 요소별 연산으로 대체할 수 있습니다. 모든 요소를 합산하기 전에
a
의
i
번째 행과
b
의
j
번째 열에 해당하는 텐서를 서로 곱하면 되겠죠. 그러면 가장 안쪽의 반
복분이 파이토치로 대체되므로,
C
언어 수준의 속도로 처리할 수 있습니다.
단순히
a
[
i
,:]
나
b
[:,
j
]
처럼 써서 하나의 열이나 행에 접근할 수 있습니다.
:
은 해당 차원
의 모든 것을 취하라는 의미지만,
1
:
5
처럼 범위를 명시해서 ...