Numpy의 랜던 숫자 생성 기능은 데이터 분석, 시뮬레이션, 머신러닝 등에서 많이 사용된다.
numpy.random 모듈을 활용하면 다양한 확률 분포에 따른 난수를 쉽게 생성할 수 있다.
numpy.random 모듈은 통계학적 분포를 따르는 난수 뿐만 아니라 여러가지 유용한 랜덤 샘플링 기법을 제공한다.
1. np.random.random()
● 0 이상 1 미만의 균등분포에서 난수를 생성한다.
● np.random.random(size)
● size 파라미터로 생성할 배열의 크기를 지정할 수 있다.
import numpy as np
rand_arr = np.random.random(5)
print(rand_arr)
## 출력
[0.85737057 0.38114576 0.67098185 0.29898713 0.43120272]
*균등분포: 확률밀도함수가 일정한 분포로, 주어진 범위 내에서 모든 값이 동일한 확률을 가지는 분포
주어진 구간에서 랜덤하게 값을 뽑았을 때, 모든 값이 동일한 확률로 선택됨.
2. np.random.uniform()
● np.random.uniform(low, high, size)
● 균등 분포에 따라 low와 high사이에서 난수를 생성한다.
● random()과 달리 low와 high값을 지정할 수 있다.
rand_uniform = np.random.uniform(0, 5, size=3)
print(rand_uniform)
## 출력 [4.05961504 3.23067416 1.95382239]
3. np.random.randn()
● 표준정규분포를 따르는 난수를 생성하는 함수
● 생성된 값들은 평균을 중심으로 대칭적으로 분포
● np.random.randn(size)
import numpy as np
# 표준 정규 분포에서 난수 5개 생성
random_normal = np.random.randn(5)
print(random_normal)
## 출력
[ 0.4515841 -0.19432967 -0.70119772 0.68811335 1.34165691]
4. np.random.normal()
● 정규분포를 따르는 난수를 생성한다.
● randn()함수와 비슷하지만 평균과 표준편차를 인수로 지정할 수 있다.
● np.random.normal(loc, scale, size) loc: 평균, scale: 표준편차, size: 배열 크기
rand_normal = np.random.normal(0, 1, size=5)
print(rand_normal)
## 출력 [-0.67083647 0.60980033 -0.89807303 0.21254283 -0.6738996 ]
5. np.random.rand()
● random()함수와 유사하지만, 배열의 크기를 파라미터로 직접 전달한다.
● random()함수와 마찬가지로 균등분포에서 0이상 1미만의 난수를 생성한다
● np.random.rand(d0, d1, ..., dn)
rand_arr = np.random.rand(3, 4) # 3x4 배열 생성
print(rand_arr)
## 출력
[[0.75795393 0.10726866 0.63904263 0.63539994]
[0.72574073 0.47446369 0.16789948 0.3732481 ]
[0.34833214 0.12229996 0.93722798 0.92827445]]
6. np.random.randint()
● 지정한 범위의 정수를 반환한다. low는 최소값, high는 최대값이다.
● np.random.randint(low, high, size)
rand_int = np.random.randint(1, 10, size=5)
print(rand_int)
## 출력
[4 7 1 3 8]
7. np.random.choice()
● 주어진 배열 a에서 무작위로 샘플을 선택한다.
● np.random.choice(a, size, replace, p)
● size: 생성할 샘플의 수, p: 각 항목이 선택될 확률 분포를 담고 있는 배열(None이면 기본적으로 모든 원소가 동일한 확률로 선택된다.)
● replace=False로 설정하면 중복 없이 선택할 수 있다.
rand_choice = np.random.choice([1, 2, 3, 4, 5], size=3, replace=False)
print(rand_choice)
##출력
[4 2 3]
8. np.random.permutation()
● 배열을 무작위로 섞는다.
● x가 정수일 경우 0에서 x-1까지의 정수 배열을 섞는다.
● np.random.permutation(x)
arr = np.array([1, 2, 3, 4, 5])
permuted = np.random.permutation(arr)
print(permuted)
## 출력
[3 1 5 2 4]
9. np.random.seed()
● 난수 생성기의 초기값을 설정하여, 동일한 난수 시퀸스를 재현할 수 있다.
● 같이 seed값을 사용하면 항상 같은 난수를 생성한다.
● np.random.seed(seed)
np.random.seed(42) # 난수 생성기 초기화
print(np.random.random(3))
## 출력
[0.37454012 0.95071431 0.73199394]
다른 메소드들도 알아두면 좋지만 np.random.seed()는 꼭 알아두는 것이 좋다.
랜덤한 수를 생성할 때 결과가 매번 달라지기 때문에 디버깅이나 실험을 할 때 seed를 통해 난수 생성기의 초기 상태를 고정할 수 있다.
머신러닝 실험에서 같은 데이터를 다루기 위해 매번 동일한 결과를 얻고 싶을때 유용하다.
'💂군대 > KAIST ICT Academy' 카테고리의 다른 글
[Pandas] Series와 DataFrame (1) | 2024.11.22 |
---|---|
[Numpy] Boolean Masking (1) | 2024.11.09 |
[Numpy] Array Indexing (2) | 2024.11.09 |
[Numpy] Broadcasting (0) | 2024.11.03 |
[Numpy] Array manipulation (0) | 2024.11.02 |