Как сгенерировать случайное нормальное распределение фиксированного числа натуральных чисел, суммирующих до фиксированного значения - PullRequest
0 голосов
/ 18 мая 2018

Проблема заключается в следующем: случайным образом генерировать n натуральных чисел, которые суммируют до фиксированного значения sum и следуют нормальному распределению.

Как этого добиться вPython?

1 Ответ

0 голосов
/ 19 мая 2018

Один из подходов может быть следующим: Подумайте о массиве ( сумма - 1) битов.Выберите ( n - 1) из них как 1, остальные 0. Теперь между ними, как и до первого, и после последнего, у вас есть серии нулей или более.Возьмите длину каждого прогона, добавьте 1 (чтобы превратить неотрицательное в положительное), и вы получите n натуральных чисел, которые в сумме составляют sum .

Изс точки зрения реализации, вам не нужен этот массив;все, что вам нужно, это позиции тех.Убедитесь, что они различны, и убедитесь, что они находятся в диапазоне от 0 до сумма - 1 исключение.

def random_partition(n, sum):
  indices = [-1] + sorted(random.sample(range(sum - 1), n - 1)) + [sum - 1]
  return [indices[i + 1] - indices[i] for i in range(n)]

Полученные целые числа будут не следовать занормальное распределение.Как уже отмечалось в комментариях, нормальное распределение - это непрерывное распределение, в то время как вы запрашиваете целые числа, поэтому вам нужно дискретное распределение.Я думаю, что это не совсем биномиальное распределение.Но так как вы, кажется, не совсем уверены в том, какой дистрибутив вам нужен точно , возможно, это достаточно близко к нормальному дистрибутиву, чтобы удовлетворить ваши потребности.Я, честно говоря, не знаю названия для дистрибутива, который вы получите;Возможно, вы захотите проверить Cross Validated об этом.

...