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
루오