1

如何从 MathDotNet 中的分布中抽取一个样本而无需转换为特定分布?

我有一个分布d,它可以是任何随机变量,作为IDistribution. 现在,我想从中取样。我想通过尽可能少地对实际分布本身进行强制转换来做到这一点(我不想要一个巨大的案例语句,其中包含大量强制转换到真正特定的分布类型,如Bernoulli,Normal等。

我已经尝试了以下代码,对于IDistribution d类型为 的 who Bernoulli,平均值为 around 0.99

Console.WriteLine("Mean is " + ((Bernoulli)d).Mean);
Console.WriteLine("Casted sample is " + ((Bernoulli)d).Sample());
Console.WriteLine("Sample is " + d.RandomSource.NextDouble());

正如预期的那样,第一个打印语句打印 0.99。正如预期的那样,第二个打印语句倾向于返回 1,因为 99% 的时间它应该返回 1。第三个打印语句似乎给了我一个介于 0 或 1 之间的均匀随机变量(注意:它可能不是制服,这只是对打印语句的快速眼球测试,但绝对不是平均 0.99 的伯努利)。

我一般如何从适当的分布中抽样?

4

1 回答 1

0

这就是我目前正在做的事情。我想避免使用 if 语句,但现在,这行得通。如果有人有更好的答案,最好:

if (distribution is IContinuousDistribution){
    value = (double)((IContinuousDistribution)distribution).Sample();

}else{
   value = (double)((IDiscreteDistribution)distribution).Sample();

}
于 2015-07-27T18:33:17.100 回答