From c137343596e350f1fe7ee93268a8816e18aef629 Mon Sep 17 00:00:00 2001 From: tibel Date: Wed, 30 Jan 2013 19:13:26 +0100 Subject: [PATCH 1/2] Lazy load DescriptiveStatistics.Median --- src/Examples/Statistics.cs | 1 - src/Numerics/Statistics/DescriptiveStatistics.cs | 11 ++++++++--- src/UnitTests/ComplexTests/Complex32Test.cs | 2 ++ .../StatisticsTests/DescriptiveStatisticsTests.cs | 6 ------ 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Examples/Statistics.cs b/src/Examples/Statistics.cs index 4a0208a8..9e24c5c0 100644 --- a/src/Examples/Statistics.cs +++ b/src/Examples/Statistics.cs @@ -105,7 +105,6 @@ namespace Examples Console.WriteLine(@"{0} - Largest element", descriptiveStatistics.Maximum.ToString(" #0.00000;-#0.00000")); Console.WriteLine(@"{0} - Smallest element", descriptiveStatistics.Minimum.ToString(" #0.00000;-#0.00000")); Console.WriteLine(@"{0} - Mean", descriptiveStatistics.Mean.ToString(" #0.00000;-#0.00000")); - Console.WriteLine(@"{0} - Median", descriptiveStatistics.Median.ToString(" #0.00000;-#0.00000")); Console.WriteLine(@"{0} - Variance", descriptiveStatistics.Variance.ToString(" #0.00000;-#0.00000")); Console.WriteLine(@"{0} - Standard deviation", descriptiveStatistics.StandardDeviation.ToString(" #0.00000;-#0.00000")); Console.WriteLine(@"{0} - Skewness", descriptiveStatistics.Skewness.ToString(" #0.00000;-#0.00000")); diff --git a/src/Numerics/Statistics/DescriptiveStatistics.cs b/src/Numerics/Statistics/DescriptiveStatistics.cs index 6e392615..b5c1654c 100644 --- a/src/Numerics/Statistics/DescriptiveStatistics.cs +++ b/src/Numerics/Statistics/DescriptiveStatistics.cs @@ -87,7 +87,7 @@ namespace MathNet.Numerics.Statistics Compute(data); } - Median = data.Median(); + _medianLazy = new Lazy(() => data.Median()); } /// @@ -119,7 +119,7 @@ namespace MathNet.Numerics.Statistics Compute(data); } - Median = data.Median(); + _medianLazy = new Lazy(() => data.Median()); } /// @@ -158,7 +158,12 @@ namespace MathNet.Numerics.Statistics /// /// The sample median. [Obsolete("Dropped in future versions for performance reasons. Please use Statistics.Median instead.")] - public double Median { get; private set; } + public double Median + { + get { return _medianLazy.Value; } + } + + readonly Lazy _medianLazy; /// /// Gets the sample kurtosis. diff --git a/src/UnitTests/ComplexTests/Complex32Test.cs b/src/UnitTests/ComplexTests/Complex32Test.cs index 4d133295..ff3c9214 100644 --- a/src/UnitTests/ComplexTests/Complex32Test.cs +++ b/src/UnitTests/ComplexTests/Complex32Test.cs @@ -510,8 +510,10 @@ namespace MathNet.Numerics.UnitTests.ComplexTests [Test] public void CanTestForEqualityUsingOperators() { +#pragma warning disable 1718 Assert.That(Complex32.NaN != Complex32.NaN); Assert.That(Complex32.PositiveInfinity == Complex32.PositiveInfinity); +#pragma warning restore 1718 Assert.That(new Complex32(1.1f, -2.2f) == new Complex32(1.1f, -2.2f)); Assert.That(new Complex32(-1.1f, 2.2f) != new Complex32(1.1f, -2.2f)); } diff --git a/src/UnitTests/StatisticsTests/DescriptiveStatisticsTests.cs b/src/UnitTests/StatisticsTests/DescriptiveStatisticsTests.cs index 7fc132e6..a87c2161 100644 --- a/src/UnitTests/StatisticsTests/DescriptiveStatisticsTests.cs +++ b/src/UnitTests/StatisticsTests/DescriptiveStatisticsTests.cs @@ -114,7 +114,6 @@ namespace MathNet.Numerics.UnitTests.StatisticsTests AssertHelpers.AlmostEqual(data.StandardDeviation, stats.StandardDeviation, digits); AssertHelpers.AlmostEqual(skewness, stats.Skewness, 7); AssertHelpers.AlmostEqual(kurtosis, stats.Kurtosis, 7); - AssertHelpers.AlmostEqual(median, stats.Median, 15); Assert.AreEqual(stats.Minimum, min); Assert.AreEqual(stats.Maximum, max); Assert.AreEqual(stats.Count, count); @@ -146,7 +145,6 @@ namespace MathNet.Numerics.UnitTests.StatisticsTests AssertHelpers.AlmostEqual(data.StandardDeviation, stats.StandardDeviation, 15); AssertHelpers.AlmostEqual(skewness, stats.Skewness, 9); AssertHelpers.AlmostEqual(kurtosis, stats.Kurtosis, 9); - AssertHelpers.AlmostEqual(median, stats.Median, 15); Assert.AreEqual(stats.Minimum, min); Assert.AreEqual(stats.Maximum, max); Assert.AreEqual(stats.Count, count); @@ -179,7 +177,6 @@ namespace MathNet.Numerics.UnitTests.StatisticsTests AssertHelpers.AlmostEqual(data.StandardDeviation, stats.StandardDeviation, digits); AssertHelpers.AlmostEqual(skewness, stats.Skewness, 7); AssertHelpers.AlmostEqual(kurtosis, stats.Kurtosis, 7); - AssertHelpers.AlmostEqual(median, stats.Median, 15); Assert.AreEqual(stats.Minimum, min); Assert.AreEqual(stats.Maximum, max); Assert.AreEqual(stats.Count, count); @@ -212,7 +209,6 @@ namespace MathNet.Numerics.UnitTests.StatisticsTests AssertHelpers.AlmostEqual(data.StandardDeviation, stats.StandardDeviation, digits); AssertHelpers.AlmostEqual(skewness, stats.Skewness, 7); AssertHelpers.AlmostEqual(kurtosis, stats.Kurtosis, 7); - AssertHelpers.AlmostEqual(median, stats.Median, 15); Assert.AreEqual(stats.Minimum, min); Assert.AreEqual(stats.Maximum, max); Assert.AreEqual(stats.Count, count); @@ -244,7 +240,6 @@ namespace MathNet.Numerics.UnitTests.StatisticsTests AssertHelpers.AlmostEqual(data.StandardDeviation, stats.StandardDeviation, 15); AssertHelpers.AlmostEqual(skewness, stats.Skewness, 9); AssertHelpers.AlmostEqual(kurtosis, stats.Kurtosis, 9); - AssertHelpers.AlmostEqual(median, stats.Median, 15); Assert.AreEqual(stats.Minimum, min); Assert.AreEqual(stats.Maximum, max); Assert.AreEqual(stats.Count, count); @@ -277,7 +272,6 @@ namespace MathNet.Numerics.UnitTests.StatisticsTests AssertHelpers.AlmostEqual(data.StandardDeviation, stats.StandardDeviation, digits); AssertHelpers.AlmostEqual(skewness, stats.Skewness, 7); AssertHelpers.AlmostEqual(kurtosis, stats.Kurtosis, 7); - AssertHelpers.AlmostEqual(median, stats.Median, 15); Assert.AreEqual(stats.Minimum, min); Assert.AreEqual(stats.Maximum, max); Assert.AreEqual(stats.Count, count); From e6991089e02781d17a9db3c7190d69e0ac3ab0b5 Mon Sep 17 00:00:00 2001 From: tibel Date: Wed, 30 Jan 2013 19:15:22 +0100 Subject: [PATCH 2/2] Fix some IO tests on non-english OS --- .../Complex/IO/DelimitedWriterTests.cs | 13 ++++++++++--- .../Complex32/IO/DelimitedWriterTests.cs | 13 ++++++++++--- .../Double/IO/DelimitedWriterTests.cs | 13 ++++++++++--- .../Single/IO/DelimitedWriterTests.cs | 13 ++++++++++--- 4 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/UnitTests/LinearAlgebraTests/Complex/IO/DelimitedWriterTests.cs b/src/UnitTests/LinearAlgebraTests/Complex/IO/DelimitedWriterTests.cs index 2cb0d5f0..0e29a8c8 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex/IO/DelimitedWriterTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex/IO/DelimitedWriterTests.cs @@ -47,7 +47,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.IO public void CanWriteCommaDelimitedData() { var matrix = new DenseMatrix(new[,] { { new Complex(1.1, 1.1), new Complex(2.2, 2.2), new Complex(3.3, 3.3) }, { new Complex(4.4, 4.4), new Complex(5.5, 5.5), new Complex(6.6, 6.6) }, { new Complex(7.7, 7.7), new Complex(8.8, 8.8), new Complex(9.9, 9.9) } }); - var writer = new DelimitedWriter(','); + var writer = new DelimitedWriter(',') + { + CultureInfo = CultureInfo.InvariantCulture + }; var stream = new MemoryStream(); writer.WriteMatrix(matrix, stream); var data = stream.ToArray(); @@ -89,7 +92,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.IO public void CanWriteSpaceDelimitedData() { var matrix = new DenseMatrix(new[,] { { new Complex(1.1, 1.1), new Complex(2.2, 2.2), new Complex(3.3, 3.3) }, { new Complex(4.4, 4.4), new Complex(5.5, 5.5), new Complex(6.6, 6.6) }, { new Complex(7.7, 7.7), new Complex(8.8, 8.8), new Complex(9.9, 9.9) } }); - var writer = new DelimitedWriter(' '); + var writer = new DelimitedWriter(' ') + { + CultureInfo = CultureInfo.InvariantCulture + }; var stream = new MemoryStream(); writer.WriteMatrix(matrix, stream); var data = stream.ToArray(); @@ -111,7 +117,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.IO var headers = new[] { "a", "b", "c" }; var writer = new DelimitedWriter('\t') { - ColumnHeaders = headers + ColumnHeaders = headers, + CultureInfo = CultureInfo.InvariantCulture }; var stream = new MemoryStream(); writer.WriteMatrix(matrix, stream); diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/IO/DelimitedWriterTests.cs b/src/UnitTests/LinearAlgebraTests/Complex32/IO/DelimitedWriterTests.cs index b1657140..45f28027 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex32/IO/DelimitedWriterTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex32/IO/DelimitedWriterTests.cs @@ -47,7 +47,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.IO public void CanWriteCommaDelimitedData() { var matrix = new DenseMatrix(new[,] { { new Complex32(1.1f, 1.1f), new Complex32(2.2f, 2.2f), new Complex32(3.3f, 3.3f) }, { new Complex32(4.4f, 4.4f), new Complex32(5.5f, 5.5f), new Complex32(6.6f, 6.6f) }, { new Complex32(7.7f, 7.7f), new Complex32(8.8f, 8.8f), new Complex32(9.9f, 9.9f) } }); - var writer = new DelimitedWriter(','); + var writer = new DelimitedWriter(',') + { + CultureInfo = CultureInfo.InvariantCulture + }; var stream = new MemoryStream(); writer.WriteMatrix(matrix, stream); var data = stream.ToArray(); @@ -89,7 +92,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.IO public void CanWriteSpaceDelimitedData() { var matrix = new DenseMatrix(new[,] { { new Complex32(1.1f, 1.1f), new Complex32(2.2f, 2.2f), new Complex32(3.3f, 3.3f) }, { new Complex32(4.4f, 4.4f), new Complex32(5.5f, 5.5f), new Complex32(6.6f, 6.6f) }, { new Complex32(7.7f, 7.7f), new Complex32(8.8f, 8.8f), new Complex32(9.9f, 9.9f) } }); - var writer = new DelimitedWriter(' '); + var writer = new DelimitedWriter(' ') + { + CultureInfo = CultureInfo.InvariantCulture + }; var stream = new MemoryStream(); writer.WriteMatrix(matrix, stream); var data = stream.ToArray(); @@ -111,7 +117,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.IO var headers = new[] { "a", "b", "c" }; var writer = new DelimitedWriter('\t') { - ColumnHeaders = headers + ColumnHeaders = headers, + CultureInfo = CultureInfo.InvariantCulture }; var stream = new MemoryStream(); writer.WriteMatrix(matrix, stream); diff --git a/src/UnitTests/LinearAlgebraTests/Double/IO/DelimitedWriterTests.cs b/src/UnitTests/LinearAlgebraTests/Double/IO/DelimitedWriterTests.cs index 0bc905c4..b41611ff 100644 --- a/src/UnitTests/LinearAlgebraTests/Double/IO/DelimitedWriterTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Double/IO/DelimitedWriterTests.cs @@ -46,7 +46,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.IO public void CanWriteCommaDelimitedData() { var matrix = new DenseMatrix(new[,] { { 1.1, 2.2, 3.3 }, { 4.4, 5.5, 6.6 }, { 7.7, 8.8, 9.9 } }); - var writer = new DelimitedWriter(','); + var writer = new DelimitedWriter(',') + { + CultureInfo = CultureInfo.InvariantCulture + }; var stream = new MemoryStream(); writer.WriteMatrix(matrix, stream); var data = stream.ToArray(); @@ -88,7 +91,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.IO public void CanWriteSpaceDelimitedData() { var matrix = new SparseMatrix(new[,] { { 1.1, 0, 0 }, { 0, 5.5, 0 }, { 0, 0, 9.9 } }); - var writer = new DelimitedWriter(' '); + var writer = new DelimitedWriter(' ') + { + CultureInfo = CultureInfo.InvariantCulture + }; var stream = new MemoryStream(); writer.WriteMatrix(matrix, stream); var data = stream.ToArray(); @@ -110,7 +116,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.IO var headers = new[] { "a", "b", "c" }; var writer = new DelimitedWriter('\t') { - ColumnHeaders = headers + ColumnHeaders = headers, + CultureInfo = CultureInfo.InvariantCulture }; var stream = new MemoryStream(); writer.WriteMatrix(matrix, stream); diff --git a/src/UnitTests/LinearAlgebraTests/Single/IO/DelimitedWriterTests.cs b/src/UnitTests/LinearAlgebraTests/Single/IO/DelimitedWriterTests.cs index f818232b..9bce2dca 100644 --- a/src/UnitTests/LinearAlgebraTests/Single/IO/DelimitedWriterTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Single/IO/DelimitedWriterTests.cs @@ -45,7 +45,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.IO public void CanWriteCommaDelimitedData() { var matrix = new DenseMatrix(new[,] { { 1.1f, 2.2f, 3.3f }, { 4.4f, 5.5f, 6.6f }, { 7.7f, 8.8f, 9.9f } }); - var writer = new DelimitedWriter(','); + var writer = new DelimitedWriter(',') + { + CultureInfo = CultureInfo.InvariantCulture + }; var stream = new MemoryStream(); writer.WriteMatrix(matrix, stream); var data = stream.ToArray(); @@ -87,7 +90,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.IO public void CanWriteSpaceDelimitedData() { var matrix = new SparseMatrix(new[,] { { 1.1f, 0, 0 }, { 0, 5.5f, 0 }, { 0, 0, 9.9f } }); - var writer = new DelimitedWriter(' '); + var writer = new DelimitedWriter(' ') + { + CultureInfo = CultureInfo.InvariantCulture + }; var stream = new MemoryStream(); writer.WriteMatrix(matrix, stream); var data = stream.ToArray(); @@ -109,7 +115,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.IO var headers = new[] { "a", "b", "c" }; var writer = new DelimitedWriter('\t') { - ColumnHeaders = headers + ColumnHeaders = headers, + CultureInfo = CultureInfo.InvariantCulture }; var stream = new MemoryStream(); writer.WriteMatrix(matrix, stream);