NumPy 패키지의 난수 관련 명령어

numpy.random 서브패키지

numpy.random 서브패키지는 NumPy 의 랜덤 넘버 생성 관련 함수를 모아 놓은 것으로 다음과 같은 함수를 제공한다.

  • seed: pseudo random 상태 설정
  • shuffle: 조합(combination)
  • choice: 순열(permutation)
  • random_integers: uniform integer
  • rand: uniform
  • randn: Gaussina normal

컴퓨터에서 생성한 난수는 랜덤처럼 보이지만 정해진 알고리즘에 의해 생성되는 규칙적인 순열이다. seed 명령은 이러한 순열을 시작하는 초기값을 설정하여 난수가 정해전 순서로 나오게 만든다.


In [1]:
np.random.seed(0)

shuffle 명령은 주어진 배열의 순서를 뒤섞는다.


In [2]:
x = np.arange(10)
np.random.shuffle(x)
x


Out[2]:
array([2, 8, 4, 9, 1, 6, 7, 3, 0, 5])

choice 명령은 단순히 순서를 바꾸는 것이 아니라 size 인수로 정해진 갯수만큼 원소를 골라내는 역할을 한다. 이 때 replace 인수를 True로 설정하여 한 번 골랐던 원소를 다시 고를 수 있도록 할 수 있다. 또한 p 인수를 이용하여 각 원소가 선택될 확률도 설정할 수 있다.


In [5]:
np.random.choice(5, 5, replace=False)  # same as shuffle 0부터 5까지 5개를 뽑아라. replace=똑같은거 나와? ㄴㄴ. 
                                    # 공을 꺼내고 다시 넣고 뽑는 경우와 유사.


Out[5]:
array([4, 2, 3, 1, 0])

In [6]:
np.random.choice(5, 3, replace=False)


Out[6]:
array([2, 3, 4])

In [5]:
np.random.choice(5, 10)


Out[5]:
array([0, 1, 1, 0, 1, 4, 3, 0, 3, 0])

In [6]:
np.random.choice(5, 10, p=[0.1, 0, 0.3, 0.6, 0])  # p = 어떤 수가 나올 확률을 지정해줄수 있다.


Out[6]:
array([3, 3, 3, 3, 2, 3, 2, 3, 3, 3])

random_integers 명령은 주어진 범위 사이의 정수를 랜덤하게 생성한다.


In [8]:
x = np.random.random_integers(-100, 100, 50)  # -100부터 100사이 50개를 뽑아라.
sns.distplot(x, rug=True);


rand 명령은 0과 1사이의 값을 균일하게 생성한다.


In [9]:
x = np.random.rand(10000)
sns.distplot(x);


randn 명령은 표준 정규 분포 값을 균일하게 생성한다.


In [10]:
x = np.random.randn(1000)  
sns.distplot(x);


NumPy의 카운트 함수

NumPy는 생성된 난수의 통계 정보를 구하는 카운트(count)함수들도 제공한다.

정수가 각각 몇개씩 생성되었는지 알고 싶은 경우에느 unique 명령이나 bincount 명령을 사용한다. unique 명령은 연속적인 정수를 가정하지 않고 있지만 bincount 명령은 0 부터 시작한 연속적인 정수를 가정하고 있어서 혹시 전혀 생성되지 않는 정수도 감안할 수 있다.


In [11]:
np.unique([11, 11, 2, 2, 34, 34])  # 몇개가 있든 하나만. 중복제거.


Out[11]:
array([ 2, 11, 34])

In [12]:
a = np.array([[1, 1], [2, 3]])
np.unique(a)


Out[12]:
array([1, 2, 3])

In [14]:
a = np.array(['a', 'b', 'b', 'c', 'a'])
index, count = np.unique(a, return_counts=True) # return_count : 머머머가 각각 몇개씩 있느냐?

In [13]:
index


Out[13]:
array(['a', 'b', 'c'], 
      dtype='|S1')

In [15]:
count  # 인덱스를 보고 확인해야함.


Out[15]:
array([2, 2, 1])

In [16]:
np.bincount([1, 1, 2, 2, 3, 3], minlength=6)   # bincount 범위를 정해줌. minlengh: 원래는 0-5까지 넣은거야! 그래서 결과가


Out[16]:
array([0, 2, 2, 2, 0, 0])

|| x || => norm | x | => determinent


In [ ]: