MathDotNet:从分布中采样而不进行强制转换

时间:2015-07-27 14:55:30

标签: c# casting mathdotnet

如果没有的MathDotNet 中的分布中的一个样本必须如何转换为特定分布?

我有一个分发d,它可以是任意随机变量,以IDistribution传递。现在,我希望从中提取样品。我想做到这一点,必须尽可能少地在实际发行版本上进行演员表示(我不想要一个包含大量演员表的巨型案例陈述到真正特定的分布类型,如Bernoulli,{{ 1}}等等。

对于类型为Normal的{​​{1}} IDistribution,我尝试了以下代码,其平均值大约为d

Bernoulli

第一个print语句按预期打印0.99。 第二个print语句倾向于返回1,正如预期的那样,因为99%的时间它应该返回1。 第三个打印语句似乎给了我看起来像0或1之间的统一随机变量(注意:它可能不是统一的,只是对打印语句进行快速眼球测试,但它肯定是伯努利,平均值为0.99)。

我如何从适当的分布中进行一般采样?

1 个答案:

答案 0 :(得分:0)

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

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

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

}