반응형
파이썬 중복 없이 난수 추출 / 리스트에서 값 뽑기 방법 정리
파이썬에서 중복을 허가하지 않고 특정 범위 내의 숫자(정수)들 중 원하는 개수의 숫자들을 뽑거나
리스트 내에서 특정 개수의 자료들을 샘플링하는 방법을 정리해보겠습니다.
중복되지 않게 숫자들을 뽑기
이 과정은 넘파이의 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']
마찬가지로, 반환된 결과의 자료형은 넘파이 배열 타입이라는 점을 참고해주세요.
'Python > Numpy' 카테고리의 다른 글
[Numpy] 넘파이 버전 확인 / 업그레이드 및 다운그레이드 (0) | 2022.06.23 |
---|---|
[Numpy] 파이썬 1차/2차/n차 회귀식 구하기 및 시각화 예제(np.polyfit 함수 활용) (0) | 2022.06.18 |
[Numpy] 파이썬 삼각함수(sin, cos, tan)와 역삼각함수(arcsin, arccos, arctan) 메소드 정리 (0) | 2022.06.07 |