numpy.random 서브패키지는 NumPy 의 랜덤 넘버 생성 관련 함수를 모아 놓은 것으로 다음과 같은 함수를 제공한다.
seed: pseudo random 상태 설정shuffle: 조합(combination)choice: 순열(permutation) random_integers: uniform integerrand: uniformrandn: Gaussina normal컴퓨터에서 생성한 난수는 랜덤처럼 보이지만 정해진 알고리즘에 의해 생성되는 규칙적인 순열이다. seed 명령은 이러한 순열을 시작하는 초기값을 설정하여 난수가 정해전 순서로 나오게 만든다.
In [1]:
np.random.seed(0)
shuffle 명령은 주어진 배열의 순서를 뒤섞는다.
In [2]:
x = np.arange(10)
np.random.shuffle(x)
x
Out[2]:
choice 명령은 단순히 순서를 바꾸는 것이 아니라 size 인수로 정해진 갯수만큼 원소를 골라내는 역할을 한다. 이 때 replace 인수를 True로 설정하여 한 번 골랐던 원소를 다시 고를 수 있도록 할 수 있다. 또한 p 인수를 이용하여 각 원소가 선택될 확률도 설정할 수 있다.
In [5]:
np.random.choice(5, 5, replace=False) # same as shuffle 0부터 5까지 5개를 뽑아라. replace=똑같은거 나와? ㄴㄴ.
# 공을 꺼내고 다시 넣고 뽑는 경우와 유사.
Out[5]:
In [6]:
np.random.choice(5, 3, replace=False)
Out[6]:
In [5]:
np.random.choice(5, 10)
Out[5]:
In [6]:
np.random.choice(5, 10, p=[0.1, 0, 0.3, 0.6, 0]) # p = 어떤 수가 나올 확률을 지정해줄수 있다.
Out[6]:
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는 생성된 난수의 통계 정보를 구하는 카운트(count)함수들도 제공한다.
정수가 각각 몇개씩 생성되었는지 알고 싶은 경우에느 unique 명령이나 bincount 명령을 사용한다. unique 명령은 연속적인 정수를 가정하지 않고 있지만 bincount 명령은 0 부터 시작한 연속적인 정수를 가정하고 있어서 혹시 전혀 생성되지 않는 정수도 감안할 수 있다.
In [11]:
np.unique([11, 11, 2, 2, 34, 34]) # 몇개가 있든 하나만. 중복제거.
Out[11]:
In [12]:
a = np.array([[1, 1], [2, 3]])
np.unique(a)
Out[12]:
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]:
In [15]:
count # 인덱스를 보고 확인해야함.
Out[15]:
In [16]:
np.bincount([1, 1, 2, 2, 3, 3], minlength=6) # bincount 범위를 정해줌. minlengh: 원래는 0-5까지 넣은거야! 그래서 결과가
Out[16]:
|| x || => norm | x | => determinent
In [ ]: