相关疑难解决方法(0)

用固定总和选择n个数字

在某些代码中,我想选择总和为的n随机数.[0,1)1

我这样做是通过单独选择数字[0,1)并通过将每个数字除以总和来标准化它们:

numbers = [random() for i in range(n)]
numbers = [n/sum(numbers) for n in numbers]
Run Code Online (Sandbox Code Playgroud)

我的"问题"是,我得出的分布是相当偏斜的.选择一百万个数字而不是一个数字就可以了1/2.通过一些努力,我已经计算了pdf,这并不好.

这是我为5个变量得到的奇怪的pdf:

在此输入图像描述

您是否有一个好的算法来选择数字,从而产生更均匀或更简单的分布?

random algorithm math sample probability

7
推荐指数
2
解决办法
6408
查看次数

Haskell Random无法构造无限类型:a1 = IO a1

我想生成一个包含26个随机整数的列表,其与Haskell的总和为301.我写了以下内容:

import System.Random

f 1 sum = [sum]
f n sum = m : (f (n-1) (sum-m))
    where m = randomRIO (0,sum)
Run Code Online (Sandbox Code Playgroud)

但它无法编译!我对IO很困惑!

Occurs check: cannot construct the infinite type: a1 = IO a1
In the first argument of `(:)', namely `m'
In the expression: m : (f (n - 1) (sum - m))
In an equation for `f':
    f n sum
      = m : (f (n - 1) (sum - m))
      where
          m = randomRIO (0, sum)
Run Code Online (Sandbox Code Playgroud)

random io haskell

4
推荐指数
3
解决办法
311
查看次数

标签 统计

random ×2

algorithm ×1

haskell ×1

io ×1

math ×1

probability ×1

sample ×1