0

.Net 包“MathNet.Numerics.Distributions”包含一个方法Normal(double mean, double stddev, Random randomSource)

前两个参数double很容易设置。但是第三个参数Random randdomSource会造成麻烦。

有人知道设置并使用它Normal(double mean, double stddev, Random randomSource)吗?

4

2 回答 2

1

尝试这个:

var randomSource = new Random();

不过,最好的做法是在任何应用程序中只创建一个实例Random- 这是为了避免创建Random共享相同随机种子的多个实例的可能性。

所以你最好做这样的事情:

public static class Global
{
    [ThreadStatic] public static readonly Random Random = new Random();
}

然后你会这样调用你的方法:

Normal(0.0, 1.0, Global.Random);
于 2015-07-06T01:45:39.350 回答
1

正如其他人已经回答的那样,使用没有第三个参数的构造函数,即Normal(double mean, double stddev)

在处理随机源和分布时,我们建议遵循以下规则:

  • 随机源仅用于对具有分布的随机数进行抽样。如果您不需要生成随机数,请不要提供随机源,而是使用没有随机数的构造函数重载。
  • 如果您确实需要使用分布生成随机数,仅当您出于某种原因不想使用默认随机源时才提供随机源。如果默认值很好(本质上是 System.Random 的安全包装器),请使用没有的构造函数重载
  • 将 System.Random 实例传递给 Math.NET Numerics 时要小心。考虑改用 SystemRandomSource ,它是线程安全的。

也可以看看:

于 2015-07-06T04:57:19.640 回答