본문 바로가기
Python/Python Examples

[Python Examples] 파이썬 랜덤 예제 코드: np.random.choice()

by Henry Cho 2023. 1. 13.
728x90

파이썬 랜덤 예제 코드: np.random.choice()

포스트 난이도: HOO_Junior


# Example codes

 

import numpy as np
colors = ['black', 'white']
np.random.choice(colors, p=[0.75,0.25], size=10)

array(['black', 'black', 'black', 'white', 'black', 'black', 'white',
       'black', 'white', 'white'], dtype='<U5')

random.choice() 기능(Functions)은 numpy 라이브러리에서 사용할 수 있는 기능 중 하나이다. 랜덤 초이스는 말 그대로 주어진 값 또는 원소들 사이에서 랜덤하게 선택하여 결정해 주는 기능을 담당한다. 랜덤 기능이 랜덤하게 숫자를 출력해 준다면 랜덤 초이스는 정해져 있는 값이나 원소 사이에서 랜덤하게 선택된다는 차이가 있다.

 

위의 예제코드를 살펴보면 colors라는 리스트가 존재하고 black과 white라는 색깔을 의미하는 string 값들이 선언되어 있는 걸 알 수 있다. 이때 랜덤 초이스를 통해서 랜덤하게 두 개의 문자열(strings) 중에 하나의 문자열이 선택되어 출력이 된다.

 

랜덤 초이스(np.random.choice()) 기능을 사용할 때 특정 조건을 추가하여 사용할 수 있는데, 각 값들이 선택되는 확률과 출력되는 사이즈(size)를 정할 수가 있다.

 

위의 예제 코드에서처럼 p=[]로 각 원소들의 랜덤 초이스 확률을 지정하고 size를 통해서 얼마만큼의 랜덤 초이스를 실행할 것인지를 정하게 된다.

 

아래에는 또 다른 예시를 살펴볼 수 있다.


# Example codes

 

import numpy as np
chocolates = ['Twix', 'Milkyway', 'Snickers', 'M&Ms']
np.random.choice(chocolates, p=[0.30,0.25,0.25,0.20], size=50)

array(['Milkyway', 'M&Ms', 'Twix', 'Snickers', 'Snickers', 'Snickers',
       'Twix', 'Twix', 'Twix', 'Snickers', 'M&Ms', 'Snickers', 'Twix',
       'M&Ms', 'Milkyway', 'Twix', 'Twix', 'Milkyway', 'M&Ms', 'M&Ms',
       'M&Ms', 'Twix', 'M&Ms', 'Milkyway', 'Snickers', 'Twix', 'M&Ms',
       'Snickers', 'Milkyway', 'Twix', 'Snickers', 'Milkyway', 'Twix',
       'Twix', 'M&Ms', 'Twix', 'Snickers', 'Twix', 'Snickers', 'M&Ms',
       'M&Ms', 'Snickers', 'Snickers', 'Twix', 'Snickers', 'Twix', 'M&Ms',
       'Twix', 'Snickers', 'Snickers'], dtype='<U8')

위의 예제코드 또한 랜덤 초이스(np.random.choice()) 기능을 활용하여 초콜릿들을 랜덤하게 선택하여 산출하였다. 위의 경우처럼 상황에 맞추어 더 많은 원소를 추가하거나 확률을 변경할 수 있다.

 

여기서 유의할 점은 원소의 개수가 늘어난 만큼 확률을 나타내는 리스트의 원소도 늘어나야 한다는 것이다. 한마디로 각 원소가 얼마만큼의 랜덤 확률을 가지고 있는지를 1대 1로 매칭해서 나타내줘야 한다. 만약에 제대로 매칭이 이루어지지 않았다면 아래와 같은 에러 메시지가 뜬다.


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-5-230ca18dcd17> in <module>
      1 import numpy as np
      2 chocolates = ['Twix', 'Milkyway', 'Snickers', 'M&Ms']
----> 3 np.random.choice(chocolates, p=[0.30,0.25,0.25], size=50)

mtrand.pyx in numpy.random.mtrand.RandomState.choice()

ValueError: 'a' and 'p' must have same size

마찬가지로 전체 확률이 1이 넘어간다면 사실상 100%가 넘어가는 것이기에 이 역시도 에러가 발생한다. 아래의 에러는 전체 확률 p 값이 1이 넘은 경우이다.


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-6-589fa0d3bb7a> in <module>
      1 import numpy as np
      2 chocolates = ['Twix', 'Milkyway', 'Snickers', 'M&Ms']
----> 3 np.random.choice(chocolates, p=[0.30,0.25,0.25,0.5], size=50)

mtrand.pyx in numpy.random.mtrand.RandomState.choice()

ValueError: probabilities do not sum to 1

 

728x90

댓글