gpt4 book ai didi

c# - 给定每个项目的概率,从列表中选择随机项目

转载 作者:行者123 更新时间:2023-12-03 22:01:54 28 4
gpt4 key购买 nike

对不起,标题措辞不当......

我有一个名为 NGram 的对象

class NGram
{
//other properties
double Probability {get; set;} //Value between 1 and 0
}

现在假设我有这些对象的列表,这样......
List<NGrams> grams = GetNGrams();
Debug.Assert(grams.Sum(x => x.Probability) == 1);

如何在考虑概率分布的同时从此列表中选择随机项目。

例如,假设 grams[0].Probability == 0.5那么应该有 50% 的机会选择 grams[0]
我想我可能需要类似 rand.NextDouble() 的东西但我不知所措。

最佳答案

这是一种更通用的方法(意味着您不需要断言概率加为 1):

static Random rand = new Random();

public NGram GetRandom(IEnumerable<NGram> pool)
{
// get universal probability
double u = pool.Sum (p => p.Probability);

// pick a random number between 0 and u
double r = rand.NextDouble() * u;

double sum = 0;
foreach(NGram n in pool)
{
// loop until the random number is less than our cumulative probability
if(r <= (sum = sum + n.Probability))
{
return n;
}
}
// should never get here
return null;
}

关于c# - 给定每个项目的概率,从列表中选择随机项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38086513/

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