【问题标题】:use beta distribution from mathdotnet in C# in VS2013在 VS2013 的 C# 中使用来自 mathdotnet 的 beta 分布
【发布时间】:2015-07-21 04:34:01
【问题描述】:

我在 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控制样本?

【问题讨论】:

    标签: c# distribution math.net mathnet-numerics


    【解决方案1】:

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

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

    所以,如果您严格需要具有 5000 个样本的 IList&lt;double&gt;,您可以执行以下任一操作:

    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 实例,或 one of those provided by Math.NET Numerics。在类实例的情况下,您可以将其传递给构造函数,在静态例程的情况下,有一个重载接受它作为第一个参数。详情请见Probability Distributions

    【讨论】:

      猜你喜欢
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      • 2011-01-29
      相关资源
      最近更新 更多