python/numpy

2. numpy - random 서브모듈 함수 -

Abokadoh 2023. 2. 15. 17:31

numpy의 random함수의 서브 모듈 함수에 대해서 알아보자.

 

서브 모듈 함수란.

random함수에 서브로 있는 함수를 말한다. tab키를 누르면 저렇게 나온다. 굉장히 많으므로 자주 쓰는 놈들만 보자

 

1. np.random.rand() - 0~1 사이에서 샘플링

- 0과 1 사이의 uniform 한 분포로 랜덤 한 ndarray를 생성

# <in>
np.random.rand(2, 3)


# <out>
array([[0.86430509, 0.18265898, 0.46934252],
       [0.22979993, 0.89849182, 0.30967946]])

output은 매번 실행할 때마다 다른 값이 될 것이다. 

 

 

2. np.random.randn() - 정규분포에서 샘플링

- n: normal distribution(정규분포)

정규분포샘플링랜덤 ndarray를 생성한다.

# <in>
x = np.random.randn(5)
y = np.random.randn(2, 2)
z = np.random.randn(3, 4, 2)

print(x)
print(y)
print(z)


# <out>
[-0.58401638  1.37962863 -0.64165833 -0.42724694  0.74106773]
[[ 0.94302591 -0.05329357]
 [-0.52797546  1.05197714]]
[[[ 0.34171814 -0.31797128]
  [ 0.28743215 -1.05153548]
  [-0.48148663 -1.05079033]
  [ 1.46262637 -0.63480789]]

 [[-0.20628469 -1.40535006]
  [-0.92046105 -1.40223408]
  [-0.68383868 -0.78724848]
  [-2.23402328  0.08321203]]

 [[-2.07210093  1.2044467 ]
  [-0.20293513 -0.58608335]
  [ 0.09561407  0.56547173]
  [ 1.39963372 -0.14091536]]]

정규분포에서 추출한 샘플이기 때문에 음수값이 존재하는 것을 확인할 수 있다.

 

실수가 아닌 정수에서 샘플링을 하고 싶을 때 사용하는 함수를 보자

 

3. np.random.randint() - 정수만 랜덤 하게 샘플링

np.random.randint(1, 100, size =(5, 5))
# 1과 99사이의 정수를 5 x 5 배열로 랜덤 추출

함수의 양이 방대하기 때문에 함수에 적용되는 파라미터에 대해서 잘 기억이 안 날 때, shift + tab 키를 눌러 확인할 수 있다.

 

4. np.random.seed() 함수 - 사용했던 랜덤값을 기억하고 싶을 때

실험을 하다 보면 결과를 보고, 결과를 낳은 랜덤 샘플에 대해서 확인을 해야 하는 상황이 있다. 정수 일 때는 간단한 배열이라면 외우면 되지만 실수의 경우는 난감할 수 있다. 이럴 때 사용하는 함수가 seed함수이다.

# <in>
np.random.seed(28)
np.random.rand(2,2)


# <out>
array([[0.72901374, 0.5612396 ],
       [0.12496709, 0.39759237]])

seed 넘버를 28로 하고 random.rand로 하면 seed num 28의 rand 샘플인

array([[0.72901374, 0.5612396 ],
       [0.12496709, 0.39759237]])

만 결과로 나온다. 

지금은 어떻게 사용할 수 있을지. 감이 안 오겠지만 사용하는 날이 분명 올 것이다.

 

5. np.random.choice() - 주어진 것 중에서 랜덤 추출

주어진 1차원 ndarray로 부터 랜덤으로 샘플링한다.

정수가 주어진 경우는 np.arange(정수)로 간주한다.

np.random.choice(100, size=(2,2))

np.arange(100)인 2 x 2 배열을 랜덤 추출한다.

x = np.array([1, 2, 3, 1.5, 2.6, 4.9])

np.random.choice(x, size = (2, 2))

x라는 1차원 ndarray에서 2 x 2 인 2차원 배열을 랜덤으로 추출한다.

 

6. np.random.uniform(), normal() 등...

다양한 확률분포에 따른 ndarray를 생성할 수 있다.

np.random.uniform(1, 3, size = (2, 2))

np.random.normal(size = (2, 2))