Создание случайного (int) списка заданной суммы python

wece спросил: 11 июня 2018 в 11:08 в: python

Я хочу симулировать случайные выборки n с заданными вероятностями prob.

Мое текущее решение следующее:

from random import choicesresult = [0]*len(prob)
population = list(range(0,len(prob)))
ch = choices(population, weights=prob, k=n)
for i in ch:
   result[i] += 1

Моя проблема в том, что я вызываю этот код много раз и обычно с большим n, и это решение вообще не кажется эффективным.

есть лучший способ сделать это (как функция предварительной сборки какой-либо библиотеки)?

Чтобы суммировать, я хочу наиболее эффективный способ построения суммирования случайного списка до $ n $, так что вероятность получения данный список равен вероятности получения этого списка как n случайных выборов с вероятностью prob.

Спасибо

[EDIT, чтобы добавить контекст]

То, что я действительно делаю, это n случайные блуждания в виде цепи Маркова следующим образом:

def rand_walk(n,state):
    next_states,prob = complicated_function(state) // compute the next states and their probability
    succ = distribute_over_next_states(n, prob) // compute how many walk goes to which states
    accu = complicated_function_2(state) // accumulator for the result
    for ns in range(0,len(next_states)):
        accu += rand_walk(succ[i],next_states[I])
    return accu

Дело в том, что вычисление следующих состояний и их вероятность являются дорогостоящими, поэтому я не могу многократно вычислять его (таким образом, я избегаю выполнения последовательностей n). Вот почему я хочу распределить n, следуя данной вероятности.

Надеюсь, что это как-то понятно, чтобы понять ...


0 ответов