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); } ///