Gerando números aleatórios somando a um valor predefinido
Neste contexto, pretendemos gerar uma lista de números pseudo-aleatórios que somam coletivamente até um valor específico predeterminado. Um método envolve gerar aleatoriamente um número dentro de um intervalo especificado, subtraí-lo do total e repetir esse processo até que a soma seja igual ao valor desejado. No entanto, esta abordagem favorece o primeiro número gerado em termos de sua contribuição para a soma.
Para garantir a uniformidade, uma solução mais sofisticada foi desenvolvida:
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)]
Este método gera uma lista de números inteiros positivos que somam o valor de destino. O conceito chave é que todas as combinações possíveis de números têm a mesma probabilidade de serem geradas. Além disso, estender essa técnica para diferentes totais e números variados de números aleatórios é simples.
Por exemplo, se definirmos n como 4 e total como 40, poderemos obter a seguinte saída: [4, 4, 25 , 7]. É importante observar que cada elemento desta lista, quando somado, produz o valor predefinido de 40.
Para permitir números inteiros não positivos, uma modificação está disponível:
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)]
Ao incrementar cada valor em um, podemos gerar uma lista de números inteiros não negativos que somam o total desejado.
Este método garante que todas as combinações possíveis, independentemente de os números serem positivos ou não negativos, tenham igual probabilidade de serem geradas. Com sua implementação amigável e versatilidade em diferentes cenários, constrained_sum_sample_pos e constrained_sum_sample_nonneg tornaram-se essenciais para tarefas de geração de números aleatórios em Python.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3