>백엔드 개발 >파이썬 튜토리얼 >Python에서 특정 값의 합이 되는 난수를 생성하는 방법은 무엇입니까?

Python에서 특정 값의 합이 되는 난수를 생성하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-27 20:47:30372검색

How to Generate Random Numbers that Sum to a Specific Value in Python?

Python에서 미리 정의된 값으로 합산되는 난수 생성

제시된 과제는 집합적으로 합하는 의사 난수 세트를 생성하는 것입니다. 특정 값까지. 특히 사용자는 합이 40이 되는 4개의 숫자를 생성하려고 합니다.

표준 솔루션

표준 솔루션은 균일하고 다양한 목표 합계에 적응할 수 있습니다. 지정된 제약 조건을 충족하는 정수 시퀀스를 선택하기 위해 무작위 샘플링을 사용합니다.

<code class="python">import random

def constrained_sum_sample_pos(n, total):
    """Return a randomly chosen list of n positive integers summing to total.
    Each such list is equally likely to occur."""

    dividers = sorted(random.sample(range(1, total), n - 1))
    return [a - b for a, b in zip(dividers + [total], [0] + dividers)]</code>

음수가 아닌 정수 솔루션

음수가 아닌 정수가 선호되는 상황의 경우 간단한 변환은 표준 솔루션에 적용될 수 있습니다:

<code class="python">def constrained_sum_sample_nonneg(n, total):
    """Return a randomly chosen list of n nonnegative integers summing to total.
    Each such list is equally likely to occur."""

    return [x - 1 for x in constrained_sum_sample_pos(n, total + n)]</code>

그래픽 설명

생성 프로세스를 설명하기 위해 다음을 사용하여 합이 10이 되는 4개의 양의 정수를 얻는 예를 고려하십시오. constrained_sum_sample_pos(4, 10).

0 1 2 3 4 5 6 7 8 9 10  # The universe.
|                    |  # Place fixed dividers at 0, 10.
|   |     |       |  |  # Add 4 - 1 randomly chosen dividers in [1, 9]
  a    b      c    d    # Compute the 4 differences: 2 3 4 1

결론

표준 솔루션은 미리 정의된 합계로 난수를 생성하기 위한 안정적이고 균일한 접근 방식을 제공합니다. 다양한 합계 값에 맞게 조정하고 음수가 아닌 정수를 처리하도록 확장할 수 있습니다.

위 내용은 Python에서 특정 값의 합이 되는 난수를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.