0

我在 VS2013 中使用 mathdotnet 形式的 C#。

我需要从

IEnumerable<double> Samples(double a, double b)

http://numerics.mathdotnet.com/api/MathNet.Numerics.Distributions/Beta.htm#Samples

我不知道如何控制样本量。例如,我只需要从分布中获得 5000 个样本点。

这是我的 C# 代码:

  Beta betadistr = new Beta(alpha, beta);
  list<double> sample = betadistr.samples(alpha, beta); 

样品的大小是多少?

和有什么区别

 IEnumerable<double> Samples(double a, double b)

  IEnumerable<double> Samples(Random rnd, double a, double b)

如何使用rnd控制样本?

4

1 回答 1

0

这些分布提供了两种一次性生成多个样本的方法:

  • Sample()返回一个无限序列。允许惰性求值。按需取用。
  • Sample(array)完全填充数组。如果需要整个阵列,通常最快。

因此,如果您严格需要IList<double>5000 个样本,您可以执行以下任一操作:

Beta beta = new Beta(alpha, beta);
List<double> samples = beta.Samples().Take(5000).ToList();

或者

Beta beta = new Beta(alpha, beta);
double[] samples = new double[5000];
beta.Samples(samples);

如果您实际上不需要该Beta实例来做任何其他事情,则可以使用静态例程来简化这一点,它们的工作方式相同:

List<double> samples = Beta.Samples(alpha, beta).Take(5000).ToList();

或者

double[] samples = new double[5000];
Beta.Samples(samples, alpha, beta);

对于所有这些变体,您还可以提供自己的 Random 实例,或Math.NET Numerics 提供的实例之一。在类实例的情况下,您可以将其传递给构造函数,在静态例程的情况下,有一个重载接受它作为第一个参数。有关详细信息,请参阅概率分布。

于 2015-07-21T15:48:40.877 回答