본문 바로가기
머신러닝/Numpy

[Numpy] #3 무작위, 랜덤, 표본추출 (normal, random) 기초문법 공부하기 3

by doyou1 2021. 9. 28.
반응형

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

 

반응형

댓글