gpt4 book ai didi

python - 在 Python 中生成具有两个约束(总和和局部最大值)的随机整数

转载 作者:行者123 更新时间:2023-12-04 12:53:37 31 4
gpt4 key购买 nike

我有一个数据框,我想在其中创建一个新列中的随机数。随机数必须满足两个约束:

  • 随机数的总和必须达到指定的总和(在示例中,总和为 300)
  • 对于每个观察,随机数必须不是 超过约束列中的值。

  • 在下面的示例中,满足约束是因为总和为 300,并且随机数没有超过约束列。
    示例:


    GEOID
    约束
    随机的


    010010000001
    100
    80

    010010000002
    50
    40

    010010000003
    75
    60

    010010000004
    75
    60

    010010000005
    100
    60


    好像有 random numbers totaling a sum已经演示过,但我没有看到带有第二个约束的示例。
    为清楚起见编辑:新列必须是整数。最小下限值为 0。

    最佳答案

    您可以使用 multinomial分布以构建近似答案:

    def sample(total, constraints):
    import numpy as np
    rng = np.random.default_rng()
    samples = rng.multinomial(total, constraints / constraints.sum(), size=100)
    return next(val for val in samples if np.all(val < constraints))


    df["RANDOM"] = sample(300, df["CONSTRAINT"].values)
    print(df)
    输出
                 GEOID  CONSTRAINT  RANDOM
    0 10010000001 100 81
    1 10010000002 50 42
    2 10010000003 75 57
    3 10010000004 75 53
    4 10010000005 100 67
    感谢 @Michael Szczesny用于测试解决方案。
    解决这个问题的关键在于(引用自 numpy 文档):

    Its values, X_i = [X_0, X_1, ..., X_p], represent the number of timesthe outcome was i.


    在此查看更多详细信息 blog post .

    关于python - 在 Python 中生成具有两个约束(总和和局部最大值)的随机整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69271713/

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