2. numpy - random 서브모듈 함수 -
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))