Sta*_*kid 3 python random distribution frequency-distribution
本质上,我想做的是从列表中随机选择项目,同时保持内部分布。请参阅以下示例。
a = 17%
b = 12%
c = 4%
etc.
Run Code Online (Sandbox Code Playgroud)
“a”列表中有 1700 个项目。“b”的列表中有 1200 个项目。“c”列表中有 400 个项目。
我不想使用所有信息,而是想要一个模仿 a、b、c 等分布的样本。
所以我们的目标是最终,
从“a”中随机选择 170 个项目 从“b”中随机选择 120 个项目 从“c”中随机选择 40 个项目
我知道如何从列表中随机选择信息,但我无法弄清楚如何随机选择同时强制结果具有相同的分布。
如果您的列表不是很大并且内存不是问题,您可以使用这个简单的方法。
要从、和获取n元素,您可以将三个列表连接在一起,并使用以下命令从结果列表中选择随机元素:abcrandom.choice
import random
n = 50
a = ['a'] * 170
b = ['b'] * 120
c = ['c'] * 40
big_list = a + b + c
random_elements = [random.choice(big_list) for i in range(n)]
# ['a', 'c', 'a', 'a', 'a', 'b', 'a', 'c', 'b', 'a', 'c', 'a',
# 'a', 'a', 'a', 'b', 'b', 'a', 'a', 'a', 'a', 'a', 'c', 'a',
# 'c', 'a', 'b', 'a', 'a', 'c', 'a', 'b', 'a', 'c', 'b', 'a',
# 'a', 'b', 'a', 'b', 'a', 'a', 'c', 'a', 'c', 'a', 'b', 'c',
# 'b', 'b']
Run Code Online (Sandbox Code Playgroud)
对于每个元素,您将获得len(a) / len(a + b + c)从 中获取元素的概率a。
不过,您可能会多次获得相同的元素。如果您不希望这种情况发生,您可以使用random.shuffle.
| 归档时间: |
|
| 查看次数: |
9000 次 |
| 最近记录: |