[我正在将一个人口编号分成不同的矩阵,并希望现在使用随机数来测试我的代码.]
快速提问的人,感谢您的帮助 -
如果我使用;
100*rand(9,1)
Run Code Online (Sandbox Code Playgroud)
使这9个数字加到100的最佳方法是什么?
我想要0到100之间的9个随机数,加起来为100.
是否有内置命令执行此操作,因为我似乎无法找到它.
在某些代码中,我想选择总和为的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:

您是否有一个好的算法来选择数字,从而产生更均匀或更简单的分布?
清理文字:
如何创建添加upp的m = 5个随机数,比如n = 100.但是,第一个随机数是10 <x1 <30,第二个随机nr是5 <x2 <20,第三个随机nr是10 <x3 <25,等等.所以这五个随机数加起来为100.我可以创建这些约束的五个数字吗?
.
[[
相关问题A1):创建五个随机数加起来为100的标准方法是在[0,100]之间采样四个数字,并添加边界0和100,然后对这六个数字[0,x1,x2, X3,x4,100].我寻求的五个随机数是增量.那是,
100 - x[4] = delta 5
x[4]- x[3] = delta 4
x[3]- x[2] = delta 3
x[2]- x[1] = delta 2
x[1] - 0 = delta 1
Run Code Online (Sandbox Code Playgroud)
这五个增量现在将加起来为100.例如,它们可能是0,1,2,7,90.以下是一些解决此问题的代码:
total_sum = 100
n = 5
v = numpy.random.multinomial(total_sum, numpy.ones(n)/n)
Run Code Online (Sandbox Code Playgroud)
]]
.
对于我的问题,我不能允许宽间隔发生,上面的最大扩展是90-7 = 83这太宽.所以,我必须指定更严格的传播,比如[10,30].这意味着最大的随机数是30,这不允许大的点差,如83.
.
[[
相关问题A2):创建具有相同边界的10 个数字的部分解决方案,10 <x_i <30,加起来为100就像这样:只是在A1中做,但是将下边界10添加到增量.所以我得到了我想要的五个随机数:
100 - x[4] = delta 5 + 10
x[4]- x[3] = delta 4 …Run Code Online (Sandbox Code Playgroud)