티스토리 뷰

Study/AI

[Python] Numpy Random Module

생각많은 소심남 2017. 5. 17. 00:54

 numpy package에는 random이라는 module이 있다.여기에 있는 random 함수를 쓰면 0에서 1 사이의 수를 반환해준다.

1
2
3
import numpy as np
 
numpy.random.random()
cs

만약 여러개의 값을 한꺼번에 반환받고 싶으면, random 함수의 인자로 자기가 받고 싶은 자료의 크기를 넣어주면 된다. 예를 들어 1x5의 random 함수의 결과를 받고 싶으면 

1
numpy.random.random(5)
cs

를 해주면 되고, 만약 2행 2열의 행렬의 형태로 받고 싶으면

1
numpy.random.random((2,2))
cs

위와 같이 tuple의 형식으로 집어넣으면 된다. 물론 이에 대한 반환값의 자료는 numpy의 array 형태로 나온다. 물론 위의 형태는 단순한 random 함수 이고, 이 반환되는 값이 정규 분포(normal distribution)을 띄게끔도 할 수 있다. random module에 포함되어 있는 normal 함수를 사용해서 말이다. 그중 평균이 0이고 표준편차가 1인 표준 정규를 띄는 값을 얻고 싶은 경우, 첫번째 인자로 0, 두번째 인자로 1을 넣어주면 된다.

1
2
3
mean = 0
std = 1
np.random.normal(mean, std)
cs

물론 이것도 앞에서 소개한  random과 같이 동시에 여러 개의 값을 array형태로 반환받을 수 있다. 그 크기를 세번째 인자로 넣어주면 된다. 예를 들어 5x3 의 행렬로 반환받고 싶은 경우,

1
2
3
4
5
6
mean = 0
std = 1
np.random.normal(mean, std)
 
# 5x3
np.random.normal(mean, std, (5,3))
cs

 라고 해주면 된다.

 위와 같은 경우는 아마 결과를 확인해 본 사람은 알겠지만 실수형태로 반환된다. 만약 정수형태로 반환받고자 할경우 randint 함수를 쓴다. 이때 첫번째는 가장 낮은 값, 두번째는 가장 높은 값, 결국 두 값 사이의 한 정수를 임의로 반환해주는 함수도 이 함수도 역시 세번째 인자로 크기를 받기 때문에 적당한 크기를 삽입해주면 된다.

1
2
3
4
int_min = 0
int_max = 10
 
np.random.randint(int_min, int_max, (5,3))
cs

여기서 좀 응용을 해보자면 위와 같은 함수의 결과로 5x3 크기의 행렬이 생겼을텐데 각 행 혹은 각 렬의 합은 어떻게 구할까? 사실 일반 python에서 제공하는 sum 함수는 단순히 행렬 전체의 합만 반환해주지만, numpy의 sum은 dimension을 지정해서 해당 dimension에서의 합을 따로 분리해낼 수 있다. 예를 들어 위와 같이 randint의 output을 특정 변수에 넣고 sum을 통해서 각 행과 열의 합을 구하려면 다음과 같이 하면 된다.

그런데 현재 X의 크기는 5x3으로 지정되어 있는데, axis=2, 즉 차원을 하나 더 올리면 어떻게 될까? 그건 직접 해보길 바란다.

댓글