对于如何找到执行以下操作的干净算法,我有些茫然:
假设我有一个dict k:
>>> k = {'A': 68, 'B': 62, 'C': 47, 'D': 16, 'E': 81}
我现在想根据它们在总键(即总和)中所具有的“权重”,随机选择这些键之一。
>>> sum(k.values())
>>> 274
所以有一个
>>> 68.0/274.0
>>> 0.24817518248175183
选择A的百分比变化为24.81%。
您将如何编写可解决此问题的算法?换句话说,这确保了在10.000个随机选择中,A将被选择2.481次吗?
这是一个加权选择函数,其中包含一些行使它的代码。
import random
def WeightedPick(d):
r = random.uniform(0, sum(d.itervalues()))
s = 0.0
for k, w in d.iteritems():
s += w
if r < s: return k
return k
def Test():
k = {'A': 68, 'B': 62, 'C': 47, 'D': 16, 'E': 81}
results = {}
for x in xrange(10000):
p = WeightedPick(k)
results[p] = results.get(p, 0) + 1
print results
Test()
问题内容: 如何根据分配给每一行的概率机会从数据库中选择随机行。 例子: 如何根据必须选择的可能性来选择随机的品牌名称及其值。 和可以结合使用吗?如果是这样,最好的方法是什么? 问题答案: 您可以通过使用然后再使用累积和来执行此操作。假设它们的总和为100%: 笔记: 在子查询中被调用一次以初始化变量。多次调用是不可取的。 随机数极有可能恰好位于两个值之间的边界上。的任意选择1。 通过在时停止子查
问题内容: 假设我有一个看起来像这样的数据框: 如何才能为每一行随机选择一个(或多个)行?假设我希望每人随机抽取一次,我将得到: 问题答案:
问题内容: 我想从集合中选择一个随机项目,但是选择任何项目的机会应与相关的权重成比例 输入示例: 因此,如果我有4种可能的物品,那么没有重量的任何一件物品的机会将是四分之一。 在这种情况下,用户遭受痛苦之剑的可能性应该是三刃剑的十倍。 如何在Java中进行加权随机选择? 问题答案: Apache Commons中现在有一个用于此的类: 这里是,像(假设Item接口阿恩的答案): 或在Java 8中
假设我有一个随机选择的项目池。 我使用一个简单的加权选择算法来做到这一点: 计算项目权重总和 在0和权重和之间选择一个随机数 迭代项目,并按项目权重减少,选择项目时 同时,约束传播算法更新可用项目池。 例如,假设我们有一个N乘N的网格,每个单元格可以选择一个数字 使用上述算法,通过加权选择完成选择 一旦一个单元选择了它的编号,它还会使用一些规则限制相邻单元的可用编号 我的问题是: 假设牢房A和B是
问题 你想从一个序列中随机抽取若干元素,或者想生成几个随机数。 解决方案 random 模块有大量的函数用来产生随机数和随机选择元素。 比如,要想从一个序列中随机的抽取一个元素,可以使用 random.choice() : >>> import random >>> values = [1, 2, 3, 4, 5, 6] >>> random.choice(values) 2 >>> random
问题内容: 允许从向量中进行加权选择,即 选择概率为0.2的1,概率为0.5的2和概率为0.3的3。 如果我们想对每个行都是概率向量的2D数组(矩阵)以向量化的方式快速进行操作,该怎么办?也就是说,我们想要一个来自随机矩阵的选择向量吗?这是超级慢的方式: : 这篇文章表明,并且可能是一种潜在的方法,而且很快。但是虽然可以沿numpy数组的一个轴执行此操作,但是该函数一次只能在单个数组上运行。同样,