【发布时间】:2019-06-25 18:30:54
【问题描述】:
如何采样 N 个随机值以满足以下约束条件?
- N 个值加起来为 1.0
- 没有一个值小于 0.01(或其他一些阈值 T N)
以下过程是我的第一次尝试。
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% 的约束。这适用于边缘,但在内部不起作用 - 如果两个随机值的距离
>>> numpy.random.seed(2000)
>>> proportions(5)
[0.3397481983960182, 0.14892479749759702, 0.07456518420712799, 0.005868759570153426, 0.43089306032910335]
有什么建议可以修复这种损坏的方法或用更好的方法代替它吗?
【问题讨论】: