[Numpy] #3 무작위, 랜덤, 표본추출 (normal, random) 기초문법 공부하기 3
numpy 기본 문법들을 정리하면서 사실 빼먹은 부분이 있다.
바로, np.random 모듈이다. 데이터 샘플을 추출해 간편하게 테스트를 진행하는데 도움이 되는 클래스다.
하지만, np.random.normal()을 정리하던 중, 정규분포 등에 대한 이해가 부족한 것 같아 이론도 함께 포스팅해보는 것이 좋을 것 같다고 판단했다.
먼저 간단하게 np.random에 대해 알아보고, 이후 정규분포 등 이론과 함께 실제 어떠한 방식으로 구현하고, 그려지는지 알아보도록 하겠다.
- random.rand()
- numpy.random 모듈은 기본적으로 난수 배열을 생성한다.
import numpy as np
a = np.random.rand(10)
print(a) # [0.96336144 0.22551758 0.21048369 0.03835416 0.62371339 0.04156472
# 0.21176683 0.73632178 0.33026067 0.84630173]
a = np.random.rand(2, 3)
print(a) # [[0.93643476 0.4857223 0.70940281]
# [0.66230255 0.16112626 0.81223394]]
- 위의 코드를 보면
np.random.rand(arg1)는 0~1 사이의 값을 arg1개 생성
np.random.rand(arg1, arg2)는 0~1 사이의 값을 arg1 * arg2개, (arg1, arg2) 모양의 배열 생성
- random.randint()
- random.randint()는 임의의 정수를 생성한다.
a = np.random.randint(5)
print(a) # 2
a = np.random.randint(2, size=5)
print(a) # [1 1 0 0 0]
a = np.random.randint(3, 7, size=6)
print(a) # [6 3 4 4 3 3]
a = np.random.randint(1, 10, size=(3, 3))
print(a) # [[4 5 1]
# [4 6 9]
# [1 5 9]]
위의 코드를 보면
- random.randint(arg)
- random.randint(arg, size=n)
- random.randint(arg1, arg2, size=n)
- random.randint(arg1, arg2, size=(n, m))
이 정도의 종류가 있겠다.
- random.randint(5)는 0<=x<5 사이의 임의의 값을 size(default=1)는 1이므로, 스칼라 1개의 정수 생성
- random.randint(2, size=5)는 0<=x<2 사이의 임의의 값을 원소로 갖고, size=5이므로, 5개짜리 1차원 배열(벡터) 생성
- random.randint(3, 7, size=6)는 3<=x<7 사이의 임의의 값을 원소로 갖고, size=6이므로, 6개짜리 1차원 배열(벡터) 생성
- random.randint(1, 10, size=(3, 3))는 1<=x<10 사이의 임의의 값을 원소로 갖고, size=(3,3)이므로, (3,3) 짜리 2차원 배열(매트릭스) 생성
- random.normal()
- 정규분포와 관련된 메소드 차례이다.
a = np.random.normal(0, 1, 2)
print(a) # [0.50468547 0.66731928]
a = np.random.normal(1.2, 1.2, 6)
print(a) # [1.10510272 2.77021298 0.12799903 2.27507856 3.17976773 1.38630216]
a = np.random.normal(3.0, 1.5, 5)
print(a) # [2.61482105 3.40154984 5.44644282 1.49042464 5.25175945]
a = np.random.normal(1.5, 3.0, 5)
print(a) # [5.41829082 2.88277261 3.81058746 5.95167941 0.85576692]
a = np.random.normal(1.5, 3.0, (2, 3))
print(a) # [[4.08615198 2.32661683 5.89625745]
# [0.32099564 0.67021435 2.65726942]]
random.normal() 관련 문서를 찾아보며, 위 코드를 해석해 보자면
- np.random.normal(0, 1, 2)
정규분포 $ N(0, 1) $ 에서 얻은 임의의 숫자 2개 생성
- np.random.normal(1.2, 1.2, 6)
정규분포 $ N(1.2, 1.2^{2}) $ 에서 얻은 임의의 숫자 2개 생성
- np.random.normal(3.0, 1.5, 5)
정규분포 $ N(3.0, 1.5^{2}) $ 에서 얻은 임의의 숫자 5개 생성
- np.random.normal(1.5, 3.0, 5)
정규분포 $ N(1.5, 3.0^{2}) $ 에서 얻은 임의의 숫자 5개 생성
- np.random.normal(1.5, 3.0, (2, 3))
정규분포 $ N(1.5, 3.0^{2}) $ 에서 얻은 임의의 숫자 2 * 3개, (2, 3) 모양의 배열(매트릭스) 생성
여기서 정규분포 $ N(X, Y^{2}) $ 는 무슨 뜻일까? 이에 대해 알아보자. 관련 포스팅을 작성했다
- 정규분포란?
https://doyou-study.tistory.com/41
[수학] 정규분포란
Numpy.random.normal를 공부하다 메소드 구현은 가능하나, 관련한 설명을 이해못하겠어서 직접 공부해보려한다. 정규분포를 검색해보면 이런 그림이 등장한다. 어디서 본적은 있는거같은데 정확하게
doyou-study.tistory.com
관련 포스팅 내용으로 보자면
np.random.normal(arg1, arg2, (m, n))은
- arg1 = 평균
- arg2 = 표준편차
- (m, n) = 생성된 배열의 모양
으로 해석된다.
* 참조
- https://codetorial.net/numpy/random.html
NumPy 난수 생성 (Random 모듈) - Codetorial
예제1 - 기본 사용 import numpy as np a = np.random.randn(5) print(a) b = np.random.randn(2, 3) print(b) sigma, mu = 1.5, 2.0 c = sigma * np.random.randn(5) + mu print(c) [ 0.06704336 -0.48813686 0.4275107 -0.9015714 -1.30597604] [[ 0.87354043 0.03783
codetorial.net