【问题标题】:Django: Creating model instances with a random integer field value that average up to a specified numberDjango:创建具有随机整数字段值的模型实例,该值平均为指定数字
【发布时间】:2011-03-02 20:25:27
【问题描述】:

我有一个这样的模型:

class RunnerStat(models.Model):
    id_card= models.CharField(max_length=32)
    miles = models.PositiveSmallIntegerField()
    last_modified = models.DateField(auto_now=True)

我想创建几个 RunnerStat 实例,这些实例具有随机的 miles 值,这些值平均达到特定数字。

我知道这可能涉及一些统计数据(分布等)。有没有人有任何指示?或者做了类似的事情并且可以分享一些代码?

示例:创建 100 个 RunnerStat 对象,其随机 miles 值平均为 10。

【问题讨论】:

    标签: database django django-models statistics


    【解决方案1】:

    如果平均值必须在给定数字附近但不完全是,您可以使用随机模块中的random.gauss(mu, sigma)。这将创建一组更自然的随机值,这些值的平均值(平均值)围绕mu 的给定值,标准偏差为sigma。您创建的跑步者越多,平均值就越接近预期值。

    import random
    
    avg = 10
    stddev = 5
    n = random.gauss(avg,stddev)
    for r in range(100):
      r = RunnerStat(miles=avg+n)
      r.save()
    

    如果您需要将平均值作为准确的数字,那么您始终可以创建一个跑步者(或更合理的几个跑步者)来平衡您当前与平均值的差异。

    【讨论】:

    • 我明天去试试。
    • 对不起。是的!感谢您的跟进,并为延迟选择答案表示歉意。
    【解决方案2】:

    要平均到一个特定的数字,他们需要加起来一个特定的数字。例如,如果您希望 100 项平均为 10,则这 100 项需要加起来为 1000,因为 1000/100 = 10。

    一种不完全随机的方法是生成一个随机数,然后将其减去并添加到您的平均值中,生成两个 RunnerStat 项。

    所以你做这样的事情(注意这是我的想法,未经测试):

    import random
    
    avg = 10
    
    n = random.randint(0,5)
    
    r1 = RunnerStat(miles=avg-n)
    r2 = RunnerStat(miles=avg+n)
    
    r1.save()
    r2.save()
    

    当然也要填写其他字段。我只是将里程数放在 RunnerStats 中。缺点是您的 RunnerStats 必须是偶数。你可以写它来传递一个数字,如果它是奇数,最后一个必须正是你想要的平均值。

    【讨论】:

      猜你喜欢
      • 2013-03-07
      • 2014-11-03
      • 2015-07-06
      • 2018-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      相关资源
      最近更新 更多