diff --git a/src/Numerics/Distributions/IContinuousDistribution.cs b/src/Numerics/Distributions/IContinuousDistribution.cs
index 06a00731..81d70b5f 100644
--- a/src/Numerics/Distributions/IContinuousDistribution.cs
+++ b/src/Numerics/Distributions/IContinuousDistribution.cs
@@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
-// Copyright (c) 2009-2013 Math.NET
+// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@@ -73,11 +73,10 @@ namespace MathNet.Numerics.Distributions
/// a sample from the distribution.
double Sample();
- // TODO: Add for v4 (adding it in v3 would break compatibility)
- // ///
- // /// Fills an array with samples generated from the distribution.
- // ///
- // void Samples(double[] values);
+ ///
+ /// Fills an array with samples generated from the distribution.
+ ///
+ void Samples(double[] values);
///
/// Draws a sequence of random samples from the distribution.
diff --git a/src/Numerics/Distributions/IDiscreteDistribution.cs b/src/Numerics/Distributions/IDiscreteDistribution.cs
index 1dc2eb22..4f646fb7 100644
--- a/src/Numerics/Distributions/IDiscreteDistribution.cs
+++ b/src/Numerics/Distributions/IDiscreteDistribution.cs
@@ -73,11 +73,10 @@ namespace MathNet.Numerics.Distributions
/// a sample from the distribution.
int Sample();
- // TODO: Add for v4 (adding it in v3 would break compatibility)
- // ///
- // /// Fills an array with samples generated from the distribution.
- // ///
- // void Samples(int[] values);
+ ///
+ /// Fills an array with samples generated from the distribution.
+ ///
+ void Samples(int[] values);
///
/// Draws a sequence of random samples from the distribution.
diff --git a/src/Numerics/Generate.cs b/src/Numerics/Generate.cs
index 005eccef..4c4b4ab6 100644
--- a/src/Numerics/Generate.cs
+++ b/src/Numerics/Generate.cs
@@ -688,12 +688,7 @@ namespace MathNet.Numerics
public static T[] UniformMap(int length, Func map)
{
var samples = SystemRandomSource.FastDoubles(length);
- var data = new T[length];
- for (int i = 0; i < data.Length; i++)
- {
- data[i] = map(samples[i]);
- }
- return data;
+ return Map(samples, map);
}
///
@@ -713,12 +708,7 @@ namespace MathNet.Numerics
{
var samples1 = SystemRandomSource.FastDoubles(length);
var samples2 = SystemRandomSource.FastDoubles(length);
- var data = new T[length];
- for (int i = 0; i < data.Length; i++)
- {
- data[i] = map(samples1[i], samples2[i]);
- }
- return data;
+ return Map2(samples1, samples2, map);
}
///
@@ -745,7 +735,9 @@ namespace MathNet.Numerics
///
public static double[] Gaussian(int length, double mean, double standardDeviation)
{
- return Normal.Samples(SystemRandomSource.Default, mean, standardDeviation).Take(length).ToArray();
+ var samples = new double[length];
+ Normal.Samples(SystemRandomSource.Default, samples, mean, standardDeviation);
+ return samples;
}
///
@@ -766,7 +758,9 @@ namespace MathNet.Numerics
/// Location mu-parameter of the stable distribution
public static double[] Stable(int length, double alpha, double beta, double scale, double location)
{
- return Distributions.Stable.Samples(SystemRandomSource.Default, alpha, beta, scale, location).Take(length).ToArray();
+ var samples = new double[length];
+ Distributions.Stable.Samples(SystemRandomSource.Default, samples, alpha, beta, scale, location);
+ return samples;
}
///
@@ -786,7 +780,9 @@ namespace MathNet.Numerics
///
public static double[] Random(int length, IContinuousDistribution distribution)
{
- return distribution.Samples().Take(length).ToArray();
+ var samples = new double[length];
+ distribution.Samples(samples);
+ return samples;
}
///
@@ -818,12 +814,9 @@ namespace MathNet.Numerics
///
public static T[] RandomMap(int length, IContinuousDistribution distribution, Func map)
{
- var data = new T[length];
- for (int i = 0; i < data.Length; i++)
- {
- data[i] = map(distribution.Sample());
- }
- return data;
+ var samples = new double[length];
+ distribution.Samples(samples);
+ return Map(samples, map);
}
///
@@ -839,12 +832,11 @@ namespace MathNet.Numerics
///
public static T[] RandomMap2(int length, IContinuousDistribution distribution, Func map)
{
- var data = new T[length];
- for (int i = 0; i < data.Length; i++)
- {
- data[i] = map(distribution.Sample(), distribution.Sample());
- }
- return data;
+ var samples1 = new double[length];
+ var samples2 = new double[length];
+ distribution.Samples(samples1);
+ distribution.Samples(samples2);
+ return Map2(samples1, samples2, map);
}
///