【问题标题】:Math.Net how to generate vector of exponential distribution random numersMath.Net如何生成指数分布随机数的向量
【发布时间】:2016-05-18 07:50:36
【问题描述】:

我正在尝试生成具有指数分布的随机数。我找到了 Math.NET NuGet 包。看起来不错,但我不知道如何生成这些数据的向量。

我已包含参考并尝试了类似的方法(受官方网站启发) - 我知道 Uniform 不会生成指数值。:

 Generate.Uniform(100);

但是我得到:“当前上下文中不存在生成 is。”

我也试过了:

 Random rnd= new Random();
 double[] samples;
 double lambda = 0.1;
 Exponential.Samples(rnd, samples,lambda); 

最后一行我得到“无效的表达式术语')'”和“;预期”。

【问题讨论】:

标签: c# exponential mathnet-numerics exponential-distribution


【解决方案1】:

Samples 函数期望数组已经分配,​​因此您可以重复使用它。它将填满整个数组。

Random rnd = new Random();
double lambda = 0.1;

double[] samples = new double[200];
Exponential.Samples(rnd, samples, lambda);

但是,您要求的是向量,而不是数组:

Vector<double> v = CreateVector.Random<double>(200, new Exponential(lambda, rnd));

您收到的错误是与 Math.NET Numerics 无关的 C# 语法错误(并且不存在于您在此处实际发布的代码中)。对于Generate,您需要打开MathNet.Numerics 命名空间。

【讨论】:

  • 谢谢你:)。还有一个问题。如何设置生成数字的范围。 0到1之间的例子?
  • 均匀分布:ContinuousUniform.Samples(rnd, samples, 0.0, 1.0); 或者您的意思是指数分布但过滤到 0.0-1.0?
  • 是的,我的意思是从 0.0 到 1.0 的指数分布。
  • 假设给定的 lambda 通常会产生超出范围的数字,您可以按照Exponential.Samples(rnd, lambda).Where(x =&gt; x &lt;= 1.0).Take(200).ToArray() 的方式做一些事情。当然,从技术上讲,这些过滤后的数字不再严格呈指数分布。
猜你喜欢
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 2012-07-14
  • 2011-05-11
  • 2014-11-06
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多