Python/Numpy

파이썬에서 중복 없이 숫자 뽑기 / 리스트 랜덤 자료 추출

jimmy_AI 2022. 6. 22. 22:01
반응형

파이썬 중복 없이 난수 추출 / 리스트에서 값 뽑기 방법 정리

파이썬에서 중복을 허가하지 않고 특정 범위 내의 숫자(정수)들 중 원하는 개수의 숫자들을 뽑거나

리스트 내에서 특정 개수의 자료들을 샘플링하는 방법을 정리해보겠습니다.

 

 

중복되지 않게 숫자들을 뽑기

이 과정은 넘파이의 random.choice 함수를 사용하시면 편리한데,

np.random.choice(range(시작 숫자, 끝 숫자+1), 개수, replace = False) 형태의 코드로

원하는 시작 숫자 ~ 끝 숫자 범위 내에서 특정 개수만큼 중복 없이 난수 샘플링이 가능합니다.

 

가령, 로또 번호의 예시로 1~45의 숫자들 중 6개를 뽑는 방법은 다음과 같습니다.

import numpy as np

# 1~45 중 중복 없이 6개 숫자 추출
numbers = np.random.choice(range(1, 46), 6, replace=False)

print(numbers) # [26 35 44 21 19 22]

위에서 함수 실행 결과(numbers)는 numpy array 자료형이므로,

리스트 변환을 원하시면 numbers = list(numbers) 형태의 코드로 변환을 해주시면 됩니다.

 

반응형

 

중복되지 않게 리스트 내에서 값들을 랜덤 추출하기

이 경우도 위처럼 넘파이의 random.choice 함수를 적용하여 편리하게 추출이 가능합니다.

np.random.choice(리스트, 개수, replace = False) 형태의 코드로

리스트 내에서 특정 개수의 자료를 중복 없이 가져올 수 있습니다.

 

또한, p 인자를 통하여 추출될 확률들의 리스트도 지정 가능하니 참고하세요.

(미지정 시 균일 확률이며, p 리스트 숫자 합계는 1이어야 하고, 난수 추출에도 적용 가능합니다.)

# 리스트에서 자료 2개 중복 없이 샘플링(균등 확률)
sample1 = np.random.choice(['A', 'B', 'C', 'D', 'E'], 2, replace=False)

print(sample1) # ['C' 'B']

# 리스트에서 자료 2개 중복 없이 샘플링(확률 지정)
sample2 = np.random.choice(['A', 'B', 'C', 'D', 'E'], 2, replace=False, p = [0.5, 0.47, 0.01, 0.01, 0.01])

print(sample2) # ['B' 'A']

마찬가지로, 반환된 결과의 자료형은 넘파이 배열 타입이라는 점을 참고해주세요.