首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带和最小值约束的实数抽样

带和最小值约束的实数抽样
EN

Stack Overflow用户
提问于 2019-06-25 18:30:54
回答 1查看 168关注 0票数 0

如何对N个随机值进行采样,从而满足以下约束条件?

  1. N值加起来等于1.0
  2. 所有值均不小于0.01 (或其他阈值T << 1/N)。

以下是我的第一次尝试。

代码语言:javascript
复制
def proportions(N):
    proportions = list()
    for value in sorted(numpy.random.random(N - 1) * 0.98 + 0.01):
        prop = value - sum(proportions)
        proportions.append(prop)
    prop = 1.0 - sum(proportions)
    proportions.append(prop)
    return proportions

* 0.98 + 0.01位旨在强制执行≥1%约束。这在边距上起作用,但在内部不起作用--如果两个随机值的距离小于0.01,则不会捕获/校正。示例:

代码语言:javascript
复制
>>> numpy.random.seed(2000)                                                                                            
>>> proportions(5)                                                                                                     
[0.3397481983960182, 0.14892479749759702, 0.07456518420712799, 0.005868759570153426, 0.43089306032910335]

有什么建议来修正这个破碎的方法或者用一个更好的方法来取代它吗?

EN

回答 1

Stack Overflow用户

发布于 2019-06-25 18:41:30

那这个呢?

  • N/2次,选择一个随机数x,使1/N+x &1/N符合您的约束;添加1/N+x &1/N。
  • 如果N是奇数,则添加1/N。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56760095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档