파이토치에서 주어진 분포로 랜덤 샘플링하는 법
개요
파이토치에서 주어진 분포로 랜덤 샘플링하는 방법을 소개한다. 베타, 베르누이, 코시, 감마, 파레토, 푸아송 등 여러 분포가 구현되어있다. 본 글에서는 균등분포를 예로 설명한다.
코드1
파이토치에서 $0$부터 $5$까지 균등 분포로 랜덤 샘플링하는 코드는 다음과 같다.
>>> m = torch.distributions.Uniform(0.0, 5)
>>> m.sample()
tensor(1.6371)
$2 \times 4$ 크기의 텐서로 샘플링하려면,
>>> torch.distributions.Uniform(0.0, 5).sample((2,4))
tensor([[0.8507, 4.6457, 3.2871, 3.2514],
[1.5863, 3.3836, 1.0727, 2.7350]])
이는 넘파이에서 np.random.uniform(0.0, 5, (2,4))
, 줄리아에서 rand(Uniform(0.0, 5), 2,4)
와 같다.
여러 범위를 주고 뽑는 것도 가능한데, 이 경우에는 범위를 반드시 텐서로 입력해야한다. $[0,2]$사이에서 하나, $[5, 6]$사이에서 하나를 뽑으려면,
>>> m = torch.distributions.Uniform(torch.tensor([0.0, 5.0]), torch.tensor([2.0, 6.0]))
>>> m.sample()
tensor([1.0503, 5.5265])
환경
- Colab
- Version: Python 3.8.10, PyTorch1.13.1+cu116