파이썬에서 숫자가 낮을 수록 뽑힐 확률이 높게 만들 수 있을까요?

조회수 1447회

random.choices 명령에서 weight에 확률을 주면 그 확률대로 뽑힌다는 것은 알고 있습니다. 그런데 반대로 필요한 상황이 있어서요. 예를 들면 확률(숫자)가 낮을수록 뽑힐 확률을 높이던가, 확률(숫자)가 높을수록 뽑힐 확률을 낮추던가, 둘 중 하나의 방법으로 쓰고 싶은데 혹시 방법이 없을까요 ?

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 모듈이 그렇게 동작 하도록 만들어 진 것인데 이걸 바꾸고 싶다는 건가요? 아니면 random.choices() 함수처럼 동작은 하는 데 숫자에 따라 반대의 확률이 되도록 새로운 모듈을 만들고 싶은 건가요? 무엇을 구현 하려는 지는 모르겠지만 후자라면 random.choices() 함수의 원형을 찾아보세요...https://github.com/python/cpython/blob/master/Lib/random.py.... 그걸 토대로 새로운 모듈을 만들 참고 자료는 될 겁니다. 알 수 없는 사용자 2019.10.15 14:07

1 답변

  • >>> samples = random.choices([1,2,3,4], weights=[90, 5, 3, 2], k=10000)
    >>> counter = collections.Counter(samples)
    >>> counter
    Counter({1: 9047, 2: 483, 3: 292, 4: 178})
    

    weights 잘 주면 되잖아요. 대충 90%, 5%, 3%, 2% 뽑혔어요.

    weights 수식만 대충 잘 만들어서 넣어주면 되요. 1/n 을 줘도 되고.

    • 먼저 답변 감사드립니다. 알 수 없는 사용자 2019.10.18 11:24
    • weights에 실행 시마다 랜덤으로 정해지는 확률을 이용해서 구하는거라서요. 미리 확률을 구할 수 있다면 저도 이렇게 할텐데 그럴 수가 없습니다. 알 수 없는 사용자 2019.10.18 11:25

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)