Python/Numpy

[Python] 파이썬 numpy 난수 생성 - random, rand, randn, randint

나비🦋 2024. 4. 18. 22:03
반응형

안녕하세요! 나비입니다 🦋

이번 포스팅에서는 파이썬 numpy 라이브러리를 이용해서 난수(임의의 수, 랜덤한 수)를 생성하는 방법을 소개하려고 합니다.

물론, 파이썬 자체 내장 모듈로 똑같이 난수를 생성하는 random 라이브러리가 있기는 합니다. 하지만, numpy와 달리 내장 random 모듈은 배열(ndarray) 기능을 지원하지 않기 때문에 선형대수학 연산이나 확률 개념이 필요한 상황에서는 numpy 라이브러리를 더 많이 사용합니다.

자주 쓰이는 메소드 3가지를 순서대로 소개드릴 텐데요, 바로 rand, randn, randint입니다. 아래서 각 메소드의 기능을 간략히 소개드리고, 그 후 예제 코드를 보여드리도록 하겠습니다.

rand : 0 이상 1 미만 실수 구간에서 균일한 분포를 가지는 난수 배열(array)을 생성합니다. 행렬의 크기를 설정할 수 있습니다.
randn : 표준정규분포로부터 생성된 난수 배열을 반환합니다. 행렬의 크기를 설정할 수 있습니다.
randint : 설정된 최솟값 이상, 최댓값 미만 구간에서 임의의 정수 배열을 생성합니다. 행렬의 크기를 설정할 수 있습니다.


파이썬 예제 코드


np.random.rand

import numpy as np

A = np.random.rand(5)
B = np.random.rand(2,2)

print(A)
print(B)
[0.42532722, 0.52618364, 0.49601726, 0.69387465, 0.44295881]
[[0.29873833, 0.59283746]
 [0.83927463, 0.44293847]]

난수 생성 관련 메소드는 다른 numpy 함수들과 달리, np.random._____ 형태로 호출할 수 있습니다.

또한, 위 출력 결과는 균일한 분포처럼 보이지 않을 수 있지만, 샘플의 크기가 지나치게 작아서 확인하기 어려운 것입니다. 배열의 크기를 100, 1000, 10000으로 늘리고, 시각화해보면 균등분포에 가까워진다는 것을 확인할 수 있습니다.

random.rand 함수의 인자로 숫자 하나를 입력하면 그 숫자만큼의 요소를 가진 행벡터를 출력합니다. 숫자 2개를 입력할 경우, 그에 맞는 크기의 행렬을 출력합니다. 이처럼, 출력되는 벡터 또는 행렬의 크기와 차원을 직접 조절할 수 있습니다.



np.random.randn

import numpy as np

A = np.random.randn(3)
B = np.random.randn(2,3)

print(A)
print(B)
[0.72496842, -1.94269564, -0.39983457]
[[-0.36962525, 0.61226929, 1.91266759]
 [ 0.2095275, -0.66655062, 0.74094405]]

rand 메소드와 마찬가지로, 출력되는 배열의 크기와 차원을 마음대로 설정할 수 있으며, 숫자 하나만 입력할 경우 행벡터를 반환합니다. 이 과정에서 표준정규분포, 즉 평균이 0이고 표준편차가 1인 정규분포로부터 난수를 얻어낸다는 점에서 rand와 차이가 있습니다.

rand와 randn는 샘플링하는 확률분포가 다를 뿐, 형식적인 측면에서는 매우 유사합니다.



np.random.randint

import numpy as np

A = np.random.randint(2, size=3)
B = np.random.randint(1, 4, size=5)
C = np.random.randint(2, 5, size=(2,2))

print(A)
print(B)
print(C)
[0, 1, 0]
[1, 1, 3, 2, 3]
[[2, 4]
 [3, 2]]

randint는 입력할 수 있는 인자의 형태가 비교적 다양합니다.

예제 코드에서,
A의 경우 [0, 2) 구간에서 임의의 정수를 샘플링하여 3요소 행벡터를 반환합니다. 즉, 0과 1 중에서 랜덤으로 3개를 뽑는 것입니다. 입력할 때 0을 생략할 수 있습니다.
B의 경우 [1, 4) 구간에서 임의의 정수를 샘플링하여 5요소 행벡터를 반환합니다. 최솟값이 0이 아닌 경우, 반드시 명시해줘야 합니다.
C의 경우, [2, 5) 구간에서 임의의 정수를 샘플링하여 2x2 행렬을 반환합니다. 사이즈를 튜플로 입력할 경우, 행렬을 출력해줍니다.




네! 여기까지 파이썬 numpy를 이용해서 난수를 생성하고, 특히 배열 형태로 출력받을 수 있는 메소드 3가지를 알아보았습니다.

긴 글 읽어주셔서 감사드려요! ✨

반응형