NumPy 기초 2 - linspace, logspace 함수, NumPy random

반응형

Index

1. linspace, logspace 함수

      1_ linspace

      2_ logspace

     

2. NumPy random

      1_ seed : 랜덤의 시작 값을 설정

      2_ rand : 균등분포로 난수를 발생

      3_ randn : 정규분포로 난수를 발생

      4_ randint : 균등분포로 정수값을 발생

      5_ suffle : 행렬 데이터를 섞어 줍니다.

      6_ choice : 특정 확률로 데이터를 선택


1. linspace, logspace 함수

linspace와 logspace 특정 곡선을 그리듯 일정 간격으로 구성된 벡터값을 생성하기 위한 함수입니다.

  • linspace : 설정한 범위에서 선형적으로 분할한 위치의 값을 출력합니다. 
  • logspace : 설정한 범위에서 로그로 분할한 위치의 값을 출력합니다. 

1_ linspace

a와 b사이에 c개의 점을 생성하기 위한 명령어입니다.

만약에 c가 생략될 경우 → linspace(a, b) 100개의 일정한 등간격을 가진 행 벡터가 생성됩니다.

  • 사용 방법 : np.linspace(a, b, c)

[코드예제]

np.linspace(0, 100, 5)

[결과] 

array([  0.,  25.,  50.,  75., 100.])

 

2_ log space

a, b, c 을 log scale 등간격인 행 벡터를 생성하는  명령어입니다.

아례 예제처럼 log^a와 log^b 사이에 등간격인 c개의 행벡터를 생성합니다

 

만약에 c가 생략될 경우 → logspace(a, b) 50개의 일정한 등간격을 가진 행 벡터가 생성됩니다.

  • 사용 방법 : np.logspace(a, b, c)

[코드예제]

# log10(x1)=2, log10(x2)=3, log10(x3)=4 만들기
np.logspace(2, 4, 3)

[결과] 

array([  100.,  1000., 10000.])

 

 

2. NumPy random

데이터를 생성할 때 랜덤하게 섞거나 임의의 수를 발생시키는 NumPy의 random 서브 패키지로 제공됩니다.

서브 패키지이기 때문에 앞에 항상 np.random.을 써주어야 합니다.  

 

1_ 시드값

  • seed : 랜덤의 시작 값을 설정

2_ 난수 생성

  • rand : 균등분포로 난수를 발생(0부터 1사이) 
  • randn : 정규분포로 난수를 발생 (가우시안의 표준 정규 분포)
  • randint : 균등분포로 정수값을 발생 (균일 분포의 정수 난수)

3_ 데이터 순서바꾸기

  • suffle : 행렬 데이터를 섞어 줍니다.

4_ 데이터 샘플링

  • choice : 특정 확률로 데이터를 선택


1_ 시드 값 생성 : seed 

: 처음 넘파이를 접하시는 분들은 seed 개념이 어려울 수 있는데 컴퓨터 프로그램에서 무작위 수는 "정말" 무작위가 아니라, 어떤 특정 시작 수를 정해주면 정해진 알고리즘에 따라 난수처럼 보이는 무작위 수열을 만들어줍니다.

이때 시작 수 "seed"라고 합니다.

특정한 시드값이 사용되면 다음에 만들어지는 난수들은 사실 모두 예측할 수는 있습니다. 

 

[코드예제]

# seed는 객체를 바꾸어주는 함수이기 때문에 1 동일한 숫자를 넣었을 경우
# randint로 출력되는 값이 같다는 걸 알 수 있다.

np.random.seed(1)
result1 = np.random.randint(10, 100, 10)

np.random.seed(1)
result2 = np.random.randint(10, 100, 10)

np.random.seed(2)
result3 = np.random.randint(10, 100, 10)

result1, result2, result3

[결과] 

(array([47, 22, 82, 19, 85, 15, 89, 74, 26, 11]),
 array([47, 22, 82, 19, 85, 15, 89, 74, 26, 11]),
 array([50, 25, 82, 32, 53, 92, 85, 17, 44, 59]))

 

2_ 난수 생성 rand, randn, randint

random의 서브 패키지 중에서 난수를 생성하는 3총사 입니다. 

  • rand : 균등분포로 난수를 발생(0부터 1사이) 
  • randn : 정규분포로 난수를 발생 (가우시안의 표준 정규 분포)
  • randint : 균등분포로 정수값을 발생 (균등 분포의 정수 난수)

균등분포와 정규 분포가 헤깔리시는 분들을 위해 아래 그림으로 설명합니다

  • rand

: 0에서 1사이 균일한 확률 분포로 실수와 난수를 만들어주는 서브 패키지 입니다. 

괄호 안에 들어가는 숫자(인수)는 난수의 크기(n개)로 보시면 됩니다.  

 

[코드예제]

np.random.rand(10)

 

array([0.20464863, 0.61927097, 0.29965467, 0.26682728, 0.62113383,
       0.52914209, 0.13457995, 0.51357812, 0.18443987, 0.78533515])

 

 

 

  • randn

: 표준편자가 1인 가우시안의 표준 정교 분포를 따른 난수 생성 패키지입니다. 

 

[코드예제]

np.random.randn(10)

 

array([-0.0191305 ,  1.17500122, -0.74787095,  0.00902525, -0.87810789,
       -0.15643417,  0.25657045, -0.98877905, -0.33882197, -0.23618403])

 

  • randint

: a에서 시작하여 b-1까지 난수를 발생시키며, 괄호 안은 행렬의 size를 말합니다. 

사용법은 

np.random.randint(a, b, (행, 열))

 

[코드예제]

r = np.random.randint(1, 10, (3, 4))
r

 

array([[2, 8, 9, 3],
       [9, 8, 2, 7],
       [9, 6, 4, 1]])

 


3_ 데이터 순서바꾸기

  • suffle : 행렬 데이터를 섞어 줍니다.

[코드예제]

np.random.shuffle(r)
r

[결과] 

array([[9, 6, 4, 1],
       [9, 8, 2, 7],
       [2, 8, 9, 3]])


4_ 데이터 샘플링 (data sampling)

  • choice : 특정 확률로 데이터를 선택합니다.  
  • 사용법
    : np.numpy.choice(a, size=None, replace=True, p=none) 
    - a : 배열이면 이미 있는 데이터로, 정수라면 arange(a) 함수 명령을 통해 데이터를 만듭니다. 
    - size : 샘플을 원하는 갯수
    - replace : boolean 으로 true일 경우 선택되었더라 하더라도 데이터를 다시 선택할 수 있습니다.
    - p : 각 데이터가 선택 될 수 있는 확률입니다 ( 주사위가 각 면이 나올 확률이 1/6인 것 처럼) 

[코드예제]

 

 

np.random.choice(5, 10, p=[0.1, 0, 0.4, 0.2, 0.3])

[결과] 

array([4, 3, 2, 4, 2, 4, 4, 3, 4, 4])

 

1. linspace, logspace 함수

      1_ linspace

      2_ logspace

     

2. NumPy random

      1_ seed : 랜덤의 시작 값을 설정

      2_ rand : 균등분포로 난수를 발생 

      3_ randn : 정규분포로 난수를 발생

      4_ randint : 균등분포로 정수값을 발생

      5_ suffle : 행렬 데이터를 섞어 줍니다.

      6_ choice : 특정 확률로 데이터를 선택

 

반응형

댓글

Designed by JB FACTORY