gpt4 book ai didi

r - 需要在 R 中编写一个新的随机生成器

转载 作者:行者123 更新时间:2023-12-01 22:05:14 26 4
gpt4 key购买 nike

我需要在 -1,1 之间生成 7 个随机数,它们的总和等于 1。我使用这段代码来做到这一点。

 diff(c(0, sort(round(runif(7,-1,1),2)), 1))

但我对此有一个大问题。

此代码的一个输出是-0.89、0.21、0.00、0.21、0.30、0.19、0.61、-0.63

问题是我猜它是统一的,所以它每次都会在第一个和最后一个数字中生成大的随机数,这不是我想要的。我需要它传播到所有号码。前任。 0.22 -.21 .33 -.12 0.11 0.35 -0.08(和不等于1的例子)

你知道我可以写一个代码来获得这种随机数吗?

最佳答案

您的总体想法可能受到 中链接的答案的启发。描述。标准问题是如何生成 0 和 1 之间的 7 个数字,它们相加为 1。答案是:

diff(c(0, sort(runif(6, 0, 1)), 1))
#> [1] 0.27960792 0.02035231 0.02638626 0.09945877 0.25134002 0.03379598 0.28905874

获取-1 和 1 之间数字的必要修改非常简单;只需省略排序:

diff(c(0, runif(6, 0, 1), 1))
#> [1] 0.9961661 -0.6528227 0.5298829 -0.2087127 -0.2298045 0.2017705 0.3635203

这是如何运作的?我们再次划分零和一之间的空间。但是 b 忽略了排序,我们允许向后移动的可能性,即负数是可能的。这是 1000 代的直方图:

enter image description here

这种方法的一个缺点是第一个和最后一个数字必须是正数。如果这让您感到困扰,您可以添加一个额外的 sample,例如:

sample(diff(c(0, runif(6, 0, 1), 1)), 7)
#> [1] -0.004242793 -0.725348335 0.385971491 0.320525822 0.389915347
#> [6] 0.053195271 0.579983197

关于r - 需要在 R 中编写一个新的随机生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52356376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com