Python numpy.random.choice(), 랜덤 샘플링

numpy.random.choice() 함수는 1차 배열의 요소들을 임의 추출(랜덤 샘플링)하는데 사용되는 함수입니다. 정해진 값들 중에 무작위로 숫자들을 얻고 싶을 때 이 함수를 사용할 수 있습니다.

1. numpy.random.choice()의 Syntax

  • arr : 1차원 배열 또는 int, 랜덤 샘플링에서 사용될 배열 또는 숫자 범위
  • size : 추출할 랜덤 샘플링 개수
  • replace : 여러 개의 랜덤 샘플링을 추출할 때, replace가 true면 동일한 값이 추출될 수 있음. false면 동일한 값이 추출되지 않음
  • p : Optional. 입력하지 않으면 모든 요소가 같은 확률로 랜덤 샘플링되며, p를 입력하여 요소마다 다른 확률로 샘플링될 수 있도록 조절할 수 있음
random.choice(arr, size=None, replace=True, p=None)

2. N개의 랜덤 숫자 추출

아래와 같이 지정된 범위의 숫자들 중에 랜덤 샘플링을 할 수 있습니다.

  • choice(N)은 0에서 'N-1' 사이의 숫자들 중에서 1개를 랜덤으로 추출
  • choice(N, A)은 0에서 'N-1' 사이의 숫자들 중에서 A개의 숫자를 랜덤으로 추출
import numpy as np

# 0~9 사이의 숫자 중 1개 랜덤 추출
arr = np.random.choice(10)
print(arr)

# 0~4 사이의 숫자 중 5개 랜덤 추출
arr = np.random.choice(5, 5)
print(arr)

Output:

8
[4 4 2 3 2]

1.1 정해진 숫자들 중에서 랜덤 샘플링

아래와 같이 정해진 숫자들 중에서 랜덤 샘플링을 할 수 있습니다.

  • choice(arr)arr 배열의 요소들 중에 1개를 랜덤으로 추출
  • choice(arr, A)arr 배열의 요소들 중에 A개를 랜덤으로 추출
import numpy as np

# 배열의 요소들 중에 랜덤으로 1개 요소 추출
arr = np.random.choice([5, 10, 15, 20, 25])
print(arr)

# 배열의 요소들 중에 랜덤으로 5개 요소 추출
arr = np.random.choice([5, 10, 15, 20, 25], 5)
print(arr)

Output:

20
[20 25 20 15 25]

3. N개의 랜덤 숫자 추출(중복 제외)

지정된 숫자들 중에서 N개의 랜덤 샘플링을 하면, 중복된 값이 여러번 추출될 수 있습니다.

  • replace=False으로 설정 시, 랜덤 샘플링에서 중복된 값을 추출하지 않음
import numpy as np

# 배열의 요소들 중에 랜덤으로 3개 요소 추출 (중복 가능)
arr = np.random.choice([5, 10, 15, 20, 25], 3)
print(arr)

# 배열의 요소들 중에 랜덤으로 3개 요소 추출 (중복 제외)
arr = np.random.choice([5, 10, 15, 20, 25], 3, replace=False)
print(arr)

Output:

[10 10 15]
[10 25  5]

3.1 가능한 숫자보다 더 많이 추출할 때

중복을 허용하지 않았을 때 추출 가능한 숫자보다 더 많은 숫자를 추출할 수는 없습니다. 만약 더 많이 추출하려고 하면 아래와 같이 에러가 발생합니다.

import numpy as np

arr = np.random.choice([5, 10, 15, 20, 25], 10, replace=False)
print(arr)

Output:

Traceback (most recent call last):
  File "/home/js/IdeaProjects/python-ex/ex2.py", line 3, in <module>
    arr = np.random.choice([5, 10, 15, 20, 25], 10, replace=False)
  File "mtrand.pyx", line 965, in numpy.random.mtrand.RandomState.choice
ValueError: Cannot take a larger sample than population when 'replace=False'

4. N개의 랜덤 숫자 추출(확률 변경)

  • p 인자로 각 요소에 대한 확률을 입력할 수 있음
  • 확률은 0 이상의 값만 가능하며, 전체 합은 1이 되어야 함
import numpy as np

# 배열의 요소들 중에 랜덤으로 10개 요소 추출 (확률 균등)
arr = np.random.choice([5, 10, 15, 20, 25], 10)
print(arr)

# 배열의 요소들 중에 랜덤으로 10개 요소 추출 (다른 확률)
arr = np.random.choice([5, 10, 15, 20, 25], 10, p=[0.4, 0, 0.2, 0.4, 0])
print(arr)

Output:

[25 25 15 25 10 20 20 15  5 15]
[ 5 20 20  5 20 20 15 20 20  5]
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha