【问题标题】:Generating duplicates with weights (python) [duplicate]使用权重生成重复项(python)[重复]
【发布时间】:2018-04-03 07:54:38
【问题描述】:

我有以下清单:

priority=['Emergency','High','Normal','Low']

我需要在上面的列表中生成一个包含 15000 个值的列表,每个值的频率分别为 10%、20%、30%、40%。有人可以告诉我怎么做吗?

【问题讨论】:

  • 我已经编辑了这个问题,我的错:)

标签: python list random duplicates


【解决方案1】:

可能最简单的方法是使用 numpy.random 的choice 函数。

import numpy as np

priority=['Emergency','High','Normal','Low']
b = np.random.choice(priority, 150, replace=True, p=[0.1, 0.2, 0.3, 0.4])

print(b)

内置 random.choices 做同样的事情,但它不可用

【讨论】:

  • 完美运行,谢谢:)
【解决方案2】:

您可以使用random.random(),并根据随机数的范围分配索引。

In [21]: priority=['Emergency','High','Normal','Low']

In [22]: idx = lambda x: 0 if x < 0.1 else (1 if x < 0.3 else (2 if x < 0.6 else 3))

In [23]: import random

In [24]: [priority[idx(random.random())] for _ in range(15000)]
Out[24]: 
['Normal',
 'High',
 'Emergency',
 'Emergency',
 'High',
 .
 .

在上面,我依靠列表中元素的顺序来生成索引,这样对于 0 到 0.1 它是第一个 (10%),0.1 到 0.3 它是第二个 (0.3 - 0.1 将覆盖 20%)等等。

【讨论】:

    猜你喜欢
    • 2011-01-18
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 2010-12-06
    • 2012-11-30
    • 1970-01-01
    相关资源
    最近更新 更多