numpy.random 서브패키지는 NumPy 의 랜덤 넘버 생성 관련 함수를 모아 놓은 것으로 다음과 같은 함수를 제공한다.
seed
: pseudo random 상태 설정shuffle
: 조합(combination)choice
: 순열(permutation)random_integers
: uniform integerrand
: uniformrandn
: Gaussina normal컴퓨터에서 생성한 난수는 랜덤처럼 보이지만 정해진 알고리즘에 의해 생성되는 규칙적인 순열이다. seed
명령은 이러한 순열을 시작하는 초기값을 설정하여 난수가 정해전 순서로 나오게 만든다.
In [2]:
np.random.seed(0)
shuffle
명령은 주어진 배열의 순서를 뒤섞는다.
In [3]:
x = np.arange(10)
np.random.shuffle(x)
x
Out[3]:
choice
명령은 단순히 순서를 바꾸는 것이 아니라 size
인수로 정해진 갯수만큼 원소를 골라내는 역할을 한다. 이 때 replace
인수를 True로 설정하여 한 번 골랐던 원소를 다시 고를 수 있도록 할 수 있다. 또한 p
인수를 이용하여 각 원소가 선택될 확률도 설정할 수 있다.
In [5]:
np.random.choice(5, 5, replace=True) # same as shuffle
Out[5]:
In [6]:
np.random.choice(5, 3, replace=False)
Out[6]:
In [7]:
np.random.choice(5, 10) #default 값은 True구만
Out[7]:
In [8]:
np.random.choice(5, 10, p=[0.1, 0, 0.3, 0.6, 0])
Out[8]:
random_integers
명령은 주어진 범위 사이의 정수를 랜덤하게 생성한다.
In [9]:
x = np.random.random_integers(-100, 100, 50)
sns.distplot(x, rug=True);
rand
명령은 0과 1사이의 값을 균일하게 생성한다.
In [10]:
x = np.random.rand(10000)
sns.distplot(x);
randn
명령은 표준 정규 분포 값을 균일하게 생성한다.
In [11]:
x = np.random.randn(1000)
sns.distplot(x);
NumPy는 생성된 난수의 통계 정보를 구하는 카운트(count)함수들도 제공한다.
정수가 각각 몇개씩 생성되었는지 알고 싶은 경우에느 unique
명령이나 bincount
명령을 사용한다. unique
명령은 연속적인 정수를 가정하지 않고 있지만 bincount
명령은 0 부터 시작한 연속적인 정수를 가정하고 있어서 혹시 전혀 생성되지 않는 정수도 감안할 수 있다.
실제로는 bincount를 더 많이 쓴다.
In [12]:
np.unique([11, 11, 2, 2, 34, 34])
Out[12]:
In [14]:
a = np.array([[1, 1], [2, 3]])
a
Out[14]:
In [15]:
a = np.array(['a', 'b', 'c', 'b', 'a'])
index, count = np.unique(a, return_counts=True)
In [16]:
index
Out[16]:
In [17]:
count
Out[17]:
In [18]:
np.bincount([1, 1, 2, 2, 3, 3, 4, 6, 6], minlength=6)
Out[18]: