diff --git a/src/Numerics/Statistics/ArrayStatistics.cs b/src/Numerics/Statistics/ArrayStatistics.cs
index 454cb303..63646059 100644
--- a/src/Numerics/Statistics/ArrayStatistics.cs
+++ b/src/Numerics/Statistics/ArrayStatistics.cs
@@ -52,7 +52,6 @@ namespace MathNet.Numerics.Statistics
/// Sample array, no sorting is assumed.
public static double Minimum(double[] data)
{
- if (data == null) throw new ArgumentNullException("data");
if (data.Length == 0) return double.NaN;
var min = double.PositiveInfinity;
@@ -73,7 +72,6 @@ namespace MathNet.Numerics.Statistics
/// Sample array, no sorting is assumed.
public static double Maximum(double[] data)
{
- if (data == null) throw new ArgumentNullException("data");
if (data.Length == 0) return double.NaN;
var max = double.NegativeInfinity;
@@ -94,7 +92,6 @@ namespace MathNet.Numerics.Statistics
/// Sample array, no sorting is assumed.
public static double Mean(double[] data)
{
- if (data == null) throw new ArgumentNullException("data");
if (data.Length == 0) return double.NaN;
double mean = 0;
@@ -114,7 +111,6 @@ namespace MathNet.Numerics.Statistics
/// Sample array, no sorting is assumed.
public static double Variance(double[] samples)
{
- if (samples == null) throw new ArgumentNullException("samples");
if (samples.Length <= 1) return double.NaN;
double variance = 0;
@@ -136,7 +132,6 @@ namespace MathNet.Numerics.Statistics
/// Sample array, no sorting is assumed.
public static double PopulationVariance(double[] population)
{
- if (population == null) throw new ArgumentNullException("population");
if (population.Length == 0) return double.NaN;
double variance = 0;
@@ -180,7 +175,6 @@ namespace MathNet.Numerics.Statistics
/// Sample array, no sorting is assumed.
public static Tuple MeanVariance(double[] samples)
{
- if (samples == null) throw new ArgumentNullException("samples");
return new Tuple(Mean(samples), Variance(samples));
}
@@ -193,14 +187,11 @@ namespace MathNet.Numerics.Statistics
/// Second sample array.
public static double Covariance(double[] samples1, double[] samples2)
{
- if (samples1 == null) throw new ArgumentNullException("samples1");
- if (samples2 == null) throw new ArgumentNullException("samples2");
if (samples1.Length != samples2.Length) throw new ArgumentException(Resources.ArgumentVectorsSameLength);
if (samples1.Length <= 1) return double.NaN;
var mean1 = Mean(samples1);
var mean2 = Mean(samples2);
-
var covariance = 0.0;
for (int i = 0; i < samples1.Length; i++)
{
@@ -218,14 +209,11 @@ namespace MathNet.Numerics.Statistics
/// Second population array.
public static double PopulationCovariance(double[] population1, double[] population2)
{
- if (population1 == null) throw new ArgumentNullException("population1");
- if (population2 == null) throw new ArgumentNullException("population2");
if (population1.Length != population2.Length) throw new ArgumentException(Resources.ArgumentVectorsSameLength);
if (population1.Length == 0) return double.NaN;
var mean1 = Mean(population1);
var mean2 = Mean(population2);
-
var covariance = 0.0;
for (int i = 0; i < population1.Length; i++)
{
@@ -242,7 +230,6 @@ namespace MathNet.Numerics.Statistics
/// One-based order of the statistic, must be between 1 and N (inclusive).
public static double OrderStatisticInplace(double[] data, int order)
{
- if (data == null) throw new ArgumentNullException("data");
if (order < 1 || order > data.Length) return double.NaN;
if (order == 1) return Minimum(data);
@@ -316,7 +303,6 @@ namespace MathNet.Numerics.Statistics
/// Sample array, no sorting is assumed. Will be reordered.
public static double[] FiveNumberSummaryInplace(double[] data)
{
- if (data == null) throw new ArgumentNullException("data");
if (data.Length == 0) return new[] { double.NaN, double.NaN, double.NaN, double.NaN, double.NaN };
// TODO: Benchmark: is this still faster than sorting the array then using SortedArrayStatistics instead?
@@ -339,7 +325,6 @@ namespace MathNet.Numerics.Statistics
///
public static double QuantileInplace(double[] data, double tau)
{
- if (data == null) throw new ArgumentNullException("data");
if (tau < 0d || tau > 1d || data.Length == 0) return double.NaN;
double h = (data.Length + 1d/3d)*tau + 1d/3d;
@@ -374,7 +359,6 @@ namespace MathNet.Numerics.Statistics
/// d-parameter
public static double QuantileCustomInplace(double[] data, double tau, double a, double b, double c, double d)
{
- if (data == null) throw new ArgumentNullException("data");
if (tau < 0d || tau > 1d || data.Length == 0) return double.NaN;
var x = a + (data.Length + b) * tau - 1;
@@ -407,7 +391,6 @@ namespace MathNet.Numerics.Statistics
/// Quantile definition, to choose what product/definition it should be consistent with
public static double QuantileCustomInplace(double[] data, double tau, QuantileDefinition definition)
{
- if (data == null) throw new ArgumentNullException("data");
if (tau < 0d || tau > 1d || data.Length == 0) return double.NaN;
if (tau == 0d || data.Length == 1) return Minimum(data);
if (tau == 1d) return Maximum(data);
diff --git a/src/Numerics/Statistics/SortedArrayStatistics.cs b/src/Numerics/Statistics/SortedArrayStatistics.cs
index 111858bd..347b97cd 100644
--- a/src/Numerics/Statistics/SortedArrayStatistics.cs
+++ b/src/Numerics/Statistics/SortedArrayStatistics.cs
@@ -46,7 +46,6 @@ namespace MathNet.Numerics.Statistics
/// Sample array, must be sorted ascendingly.
public static double Minimum(double[] data)
{
- if (data == null) throw new ArgumentNullException("data");
if (data.Length == 0) return double.NaN;
return data[0];
@@ -58,7 +57,6 @@ namespace MathNet.Numerics.Statistics
/// Sample array, must be sorted ascendingly.
public static double Maximum(double[] data)
{
- if (data == null) throw new ArgumentNullException("data");
if (data.Length == 0) return double.NaN;
return data[data.Length - 1];
@@ -71,7 +69,6 @@ namespace MathNet.Numerics.Statistics
/// One-based order of the statistic, must be between 1 and N (inclusive).
public static double OrderStatistic(double[] data, int order)
{
- if (data == null) throw new ArgumentNullException("data");
if (order < 1 || order > data.Length) return double.NaN;
return data[order - 1];
@@ -136,7 +133,6 @@ namespace MathNet.Numerics.Statistics
/// Sample array, must be sorted ascendingly.
public static double[] FiveNumberSummary(double[] data)
{
- if (data == null) throw new ArgumentNullException("data");
if (data.Length == 0) return new[] {double.NaN, double.NaN, double.NaN, double.NaN, double.NaN};
return new[] {data[0], Quantile(data, 0.25), Quantile(data, 0.50), Quantile(data, 0.75), data[data.Length - 1]};
}
@@ -156,7 +152,6 @@ namespace MathNet.Numerics.Statistics
///
public static double Quantile(double[] data, double tau)
{
- if (data == null) throw new ArgumentNullException("data");
if (tau < 0d || tau > 1d || data.Length == 0) return double.NaN;
if (tau == 0d || data.Length == 1) return data[0];
if (tau == 1d) return data[data.Length - 1];
@@ -182,7 +177,6 @@ namespace MathNet.Numerics.Statistics
/// d-parameter
public static double QuantileCustom(double[] data, double tau, double a, double b, double c, double d)
{
- if (data == null) throw new ArgumentNullException("data");
if (tau < 0d || tau > 1d || data.Length == 0) return double.NaN;
var x = a + (data.Length + b)*tau - 1;
@@ -214,7 +208,6 @@ namespace MathNet.Numerics.Statistics
/// Quantile definition, to choose what product/definition it should be consistent with
public static double QuantileCustom(double[] data, double tau, QuantileDefinition definition)
{
- if (data == null) throw new ArgumentNullException("data");
if (tau < 0d || tau > 1d || data.Length == 0) return double.NaN;
if (tau == 0d || data.Length == 1) return data[0];
if (tau == 1d) return data[data.Length - 1];
diff --git a/src/Numerics/Statistics/Statistics.cs b/src/Numerics/Statistics/Statistics.cs
index e5ef021f..73369c73 100644
--- a/src/Numerics/Statistics/Statistics.cs
+++ b/src/Numerics/Statistics/Statistics.cs
@@ -61,7 +61,6 @@ namespace MathNet.Numerics.Statistics
/// The minimum value in the sample data.
public static double Minimum(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
return StreamingStatistics.Minimum(data.Where(d => d.HasValue).Select(d => d.Value));
}
@@ -88,7 +87,6 @@ namespace MathNet.Numerics.Statistics
/// The maximum value in the sample data.
public static double Maximum(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
return StreamingStatistics.Maximum(data.Where(d => d.HasValue).Select(d => d.Value));
}
@@ -115,7 +113,6 @@ namespace MathNet.Numerics.Statistics
/// The mean of the sample.
public static double Mean(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
return StreamingStatistics.Mean(data.Where(d => d.HasValue).Select(d => d.Value));
}
@@ -142,7 +139,6 @@ namespace MathNet.Numerics.Statistics
/// A subset of samples, sampled from the full population.
public static double Variance(this IEnumerable samples)
{
- if (samples == null) throw new ArgumentNullException("samples");
return StreamingStatistics.Variance(samples.Where(d => d.HasValue).Select(d => d.Value));
}
@@ -169,7 +165,6 @@ namespace MathNet.Numerics.Statistics
/// The full population data.
public static double PopulationVariance(this IEnumerable population)
{
- if (population == null) throw new ArgumentNullException("population");
return StreamingStatistics.PopulationVariance(population.Where(d => d.HasValue).Select(d => d.Value));
}
@@ -196,7 +191,6 @@ namespace MathNet.Numerics.Statistics
/// A subset of samples, sampled from the full population.
public static double StandardDeviation(this IEnumerable samples)
{
- if (samples == null) throw new ArgumentNullException("samples");
return StreamingStatistics.StandardDeviation(samples.Where(d => d.HasValue).Select(d => d.Value));
}
@@ -223,7 +217,6 @@ namespace MathNet.Numerics.Statistics
/// The full population data.
public static double PopulationStandardDeviation(this IEnumerable population)
{
- if (population == null) throw new ArgumentNullException("population");
return StreamingStatistics.PopulationStandardDeviation(population.Where(d => d.HasValue).Select(d => d.Value));
}
@@ -268,8 +261,6 @@ namespace MathNet.Numerics.Statistics
/// A subset of samples, sampled from the full population.
public static double Covariance(this IEnumerable samples1, IEnumerable samples2)
{
- if (samples1 == null) throw new ArgumentNullException("samples1");
- if (samples2 == null) throw new ArgumentNullException("samples2");
return StreamingStatistics.Covariance(samples1.Where(d => d.HasValue).Select(d => d.Value), samples2.Where(d => d.HasValue).Select(d => d.Value));
}
@@ -299,8 +290,6 @@ namespace MathNet.Numerics.Statistics
/// The full population data.
public static double PopulationCovariance(this IEnumerable population1, IEnumerable population2)
{
- if (population1 == null) throw new ArgumentNullException("population1");
- if (population2 == null) throw new ArgumentNullException("population2");
return StreamingStatistics.PopulationCovariance(population1.Where(d => d.HasValue).Select(d => d.Value), population2.Where(d => d.HasValue).Select(d => d.Value));
}
@@ -310,7 +299,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static double Median(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.ToArray();
return ArrayStatistics.MedianInplace(array);
}
@@ -321,7 +309,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static double Median(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.Where(d => d.HasValue).Select(d => d.Value).ToArray();
return ArrayStatistics.MedianInplace(array);
}
@@ -336,7 +323,6 @@ namespace MathNet.Numerics.Statistics
/// Quantile selector, between 0.0 and 1.0 (inclusive).
public static double Quantile(this IEnumerable data, double tau)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.ToArray();
return ArrayStatistics.QuantileInplace(array, tau);
}
@@ -351,7 +337,6 @@ namespace MathNet.Numerics.Statistics
/// Quantile selector, between 0.0 and 1.0 (inclusive).
public static double Quantile(this IEnumerable data, double tau)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.Where(d => d.HasValue).Select(d => d.Value).ToArray();
return ArrayStatistics.QuantileInplace(array, tau);
}
@@ -365,7 +350,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static Func QuantileFunc(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.ToArray();
Array.Sort(array);
return tau => SortedArrayStatistics.Quantile(array, tau);
@@ -380,7 +364,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static Func QuantileFunc(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.Where(d => d.HasValue).Select(d => d.Value).ToArray();
Array.Sort(array);
return tau => SortedArrayStatistics.Quantile(array, tau);
@@ -393,7 +376,6 @@ namespace MathNet.Numerics.Statistics
/// Quantile selector, between 0.0 and 1.0 (inclusive).
public static double InverseCDF(this IEnumerable data, double tau)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.ToArray();
return ArrayStatistics.QuantileCustomInplace(array, tau, QuantileDefinition.InverseCDF);
}
@@ -405,7 +387,6 @@ namespace MathNet.Numerics.Statistics
/// Quantile selector, between 0.0 and 1.0 (inclusive).
public static double InverseCDF(this IEnumerable data, double tau)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.Where(d => d.HasValue).Select(d => d.Value).ToArray();
return ArrayStatistics.QuantileCustomInplace(array, tau, QuantileDefinition.InverseCDF);
}
@@ -416,7 +397,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static Func InverseCDFFunc(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.ToArray();
Array.Sort(array);
return tau => SortedArrayStatistics.QuantileCustom(array, tau, QuantileDefinition.InverseCDF);
@@ -428,7 +408,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static Func InverseCDFFunc(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.Where(d => d.HasValue).Select(d => d.Value).ToArray();
Array.Sort(array);
return tau => SortedArrayStatistics.QuantileCustom(array, tau, QuantileDefinition.InverseCDF);
@@ -445,7 +424,6 @@ namespace MathNet.Numerics.Statistics
/// Quantile definition, to choose what product/definition it should be consistent with
public static double QuantileCustom(this IEnumerable data, double tau, QuantileDefinition definition)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.ToArray();
return ArrayStatistics.QuantileCustomInplace(array, tau, definition);
}
@@ -461,7 +439,6 @@ namespace MathNet.Numerics.Statistics
/// Quantile definition, to choose what product/definition it should be consistent with
public static double QuantileCustom(this IEnumerable data, double tau, QuantileDefinition definition)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.Where(d => d.HasValue).Select(d => d.Value).ToArray();
return ArrayStatistics.QuantileCustomInplace(array, tau, definition);
}
@@ -476,7 +453,6 @@ namespace MathNet.Numerics.Statistics
/// Quantile definition, to choose what product/definition it should be consistent with
public static Func QuantileCustomFunc(this IEnumerable data, QuantileDefinition definition)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.ToArray();
Array.Sort(array);
return tau => SortedArrayStatistics.QuantileCustom(array, tau, definition);
@@ -492,7 +468,6 @@ namespace MathNet.Numerics.Statistics
/// Quantile definition, to choose what product/definition it should be consistent with
public static Func QuantileCustomFunc(this IEnumerable data, QuantileDefinition definition)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.Where(d => d.HasValue).Select(d => d.Value).ToArray();
Array.Sort(array);
return tau => SortedArrayStatistics.QuantileCustom(array, tau, definition);
@@ -507,7 +482,6 @@ namespace MathNet.Numerics.Statistics
/// Percentile selector, between 0 and 100 (inclusive).
public static double Percentile(this IEnumerable data, int p)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.ToArray();
return ArrayStatistics.PercentileInplace(array, p);
}
@@ -521,7 +495,6 @@ namespace MathNet.Numerics.Statistics
/// Percentile selector, between 0 and 100 (inclusive).
public static double Percentile(this IEnumerable data, int p)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.Where(d => d.HasValue).Select(d => d.Value).ToArray();
return ArrayStatistics.PercentileInplace(array, p);
}
@@ -534,7 +507,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static Func PercentileFunc(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.ToArray();
Array.Sort(array);
return p => SortedArrayStatistics.Percentile(array, p);
@@ -548,7 +520,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static Func PercentileFunc(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.Where(d => d.HasValue).Select(d => d.Value).ToArray();
Array.Sort(array);
return p => SortedArrayStatistics.Percentile(array, p);
@@ -561,7 +532,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static double LowerQuartile(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.ToArray();
return ArrayStatistics.LowerQuartileInplace(array);
}
@@ -573,7 +543,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static double LowerQuartile(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.Where(d => d.HasValue).Select(d => d.Value).ToArray();
return ArrayStatistics.LowerQuartileInplace(array);
}
@@ -585,7 +554,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static double UpperQuartile(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.ToArray();
return ArrayStatistics.UpperQuartileInplace(array);
}
@@ -597,7 +565,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static double UpperQuartile(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.Where(d => d.HasValue).Select(d => d.Value).ToArray();
return ArrayStatistics.UpperQuartileInplace(array);
}
@@ -609,7 +576,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static double InterquartileRange(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.ToArray();
return ArrayStatistics.InterquartileRangeInplace(array);
}
@@ -621,7 +587,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static double InterquartileRange(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.Where(d => d.HasValue).Select(d => d.Value).ToArray();
return ArrayStatistics.InterquartileRangeInplace(array);
}
@@ -633,7 +598,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static double[] FiveNumberSummary(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.ToArray();
return ArrayStatistics.FiveNumberSummaryInplace(array);
}
@@ -645,7 +609,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static double[] FiveNumberSummary(this IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.Where(d => d.HasValue).Select(d => d.Value).ToArray();
return ArrayStatistics.FiveNumberSummaryInplace(array);
}
@@ -657,7 +620,6 @@ namespace MathNet.Numerics.Statistics
/// One-based order of the statistic, must be between 1 and N (inclusive).
public static double OrderStatistic(IEnumerable data, int order)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.ToArray();
return ArrayStatistics.OrderStatisticInplace(array, order);
}
@@ -668,7 +630,6 @@ namespace MathNet.Numerics.Statistics
/// The data sample sequence.
public static Func OrderStatisticFunc(IEnumerable data)
{
- if (data == null) throw new ArgumentNullException("data");
var array = data.ToArray();
Array.Sort(array);
return order => SortedArrayStatistics.OrderStatistic(array, order);
diff --git a/src/Numerics/Statistics/StreamingStatistics.cs b/src/Numerics/Statistics/StreamingStatistics.cs
index ac1bb20a..b0a65c60 100644
--- a/src/Numerics/Statistics/StreamingStatistics.cs
+++ b/src/Numerics/Statistics/StreamingStatistics.cs
@@ -50,8 +50,6 @@ namespace MathNet.Numerics.Statistics
/// Sample stream, no sorting is assumed.
public static double Minimum(IEnumerable stream)
{
- if (stream == null) throw new ArgumentNullException("stream");
-
var min = double.PositiveInfinity;
bool any = false;
foreach (var d in stream)
@@ -72,8 +70,6 @@ namespace MathNet.Numerics.Statistics
/// Sample stream, no sorting is assumed.
public static double Maximum(IEnumerable stream)
{
- if (stream == null) throw new ArgumentNullException("stream");
-
var max = double.NegativeInfinity;
bool any = false;
foreach (var d in stream)
@@ -94,8 +90,6 @@ namespace MathNet.Numerics.Statistics
/// Sample stream, no sorting is assumed.
public static double Mean(IEnumerable stream)
{
- if (stream == null) throw new ArgumentNullException("stream");
-
double mean = 0;
ulong m = 0;
bool any = false;
@@ -115,12 +109,9 @@ namespace MathNet.Numerics.Statistics
/// Sample stream, no sorting is assumed.
public static double Variance(IEnumerable samples)
{
- if (samples == null) throw new ArgumentNullException("samples");
-
double variance = 0;
double sum = 0;
ulong count = 0;
-
using (var iterator = samples.GetEnumerator())
{
if (iterator.MoveNext())
@@ -138,7 +129,6 @@ namespace MathNet.Numerics.Statistics
variance += (diff*diff)/(count*(count - 1));
}
}
-
return count > 1 ? variance/(count - 1) : double.NaN;
}
@@ -150,12 +140,9 @@ namespace MathNet.Numerics.Statistics
/// Sample stream, no sorting is assumed.
public static double PopulationVariance(IEnumerable population)
{
- if (population == null) throw new ArgumentNullException("population");
-
double variance = 0;
double sum = 0;
ulong count = 0;
-
using (var iterator = population.GetEnumerator())
{
if (iterator.MoveNext())
@@ -173,7 +160,6 @@ namespace MathNet.Numerics.Statistics
variance += (diff*diff)/(count*(count - 1));
}
}
-
return variance/count;
}
@@ -207,13 +193,10 @@ namespace MathNet.Numerics.Statistics
/// Sample stream, no sorting is assumed.
public static Tuple MeanVariance(IEnumerable samples)
{
- if (samples == null) throw new ArgumentNullException("samples");
-
double mean = 0;
double variance = 0;
double sum = 0;
ulong count = 0;
-
using (var iterator = samples.GetEnumerator())
{
if (iterator.MoveNext())
@@ -232,7 +215,6 @@ namespace MathNet.Numerics.Statistics
mean += (xi - mean) / count;
}
}
-
return new Tuple(
count > 0 ? mean : double.NaN,
count > 1 ? variance/(count - 1) : double.NaN);
@@ -247,16 +229,11 @@ namespace MathNet.Numerics.Statistics
/// Second sample stream.
public static double Covariance(IEnumerable samples1, IEnumerable samples2)
{
- if (samples1 == null) throw new ArgumentNullException("samples1");
- if (samples2 == null) throw new ArgumentNullException("samples2");
-
// https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance
-
var n = 0;
var mean1 = 0.0;
var mean2 = 0.0;
var comoment = 0.0;
-
using (var s1 = samples1.GetEnumerator())
using (var s2 = samples2.GetEnumerator())
{
@@ -279,7 +256,6 @@ namespace MathNet.Numerics.Statistics
throw new ArgumentException(Resources.ArgumentVectorsSameLength);
}
}
-
return n > 1 ? comoment/(n - 1) : double.NaN;
}
@@ -292,16 +268,11 @@ namespace MathNet.Numerics.Statistics
/// Second population stream.
public static double PopulationCovariance(IEnumerable population1, IEnumerable population2)
{
- if (population1 == null) throw new ArgumentNullException("population1");
- if (population2 == null) throw new ArgumentNullException("population2");
-
// https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance
-
var n = 0;
var mean1 = 0.0;
var mean2 = 0.0;
var comoment = 0.0;
-
using (var p1 = population1.GetEnumerator())
using (var p2 = population2.GetEnumerator())
{
@@ -324,7 +295,6 @@ namespace MathNet.Numerics.Statistics
throw new ArgumentException(Resources.ArgumentVectorsSameLength);
}
}
-
return comoment/n;
}
}
diff --git a/src/UnitTests/StatisticsTests/StatisticsTests.cs b/src/UnitTests/StatisticsTests/StatisticsTests.cs
index bbc18e88..6e531629 100644
--- a/src/UnitTests/StatisticsTests/StatisticsTests.cs
+++ b/src/UnitTests/StatisticsTests/StatisticsTests.cs
@@ -63,53 +63,56 @@ namespace MathNet.Numerics.UnitTests.StatisticsTests
{
double[] data = null;
- Assert.Throws(() => Statistics.Minimum(data));
- Assert.Throws(() => Statistics.Maximum(data));
- Assert.Throws(() => Statistics.Mean(data));
- Assert.Throws(() => Statistics.Median(data));
- Assert.Throws(() => Statistics.Quantile(data, 0.3));
- Assert.Throws(() => Statistics.Variance(data));
- Assert.Throws(() => Statistics.StandardDeviation(data));
- Assert.Throws(() => Statistics.PopulationVariance(data));
- Assert.Throws(() => Statistics.PopulationStandardDeviation(data));
- Assert.Throws(() => Statistics.Covariance(data, data));
- Assert.Throws(() => Statistics.PopulationCovariance(data, data));
-
- Assert.Throws(() => SortedArrayStatistics.Minimum(data));
- Assert.Throws(() => SortedArrayStatistics.Maximum(data));
- Assert.Throws(() => SortedArrayStatistics.OrderStatistic(data, 1));
- Assert.Throws(() => SortedArrayStatistics.Median(data));
- Assert.Throws(() => SortedArrayStatistics.LowerQuartile(data));
- Assert.Throws(() => SortedArrayStatistics.UpperQuartile(data));
- Assert.Throws(() => SortedArrayStatistics.Percentile(data, 30));
- Assert.Throws(() => SortedArrayStatistics.Quantile(data, 0.3));
- Assert.Throws(() => SortedArrayStatistics.QuantileCustom(data, 0.3, 0, 0, 1, 0));
- Assert.Throws(() => SortedArrayStatistics.QuantileCustom(data, 0.3, QuantileDefinition.Nearest));
- Assert.Throws(() => SortedArrayStatistics.InterquartileRange(data));
- Assert.Throws(() => SortedArrayStatistics.FiveNumberSummary(data));
-
- Assert.Throws(() => ArrayStatistics.Minimum(data));
- Assert.Throws(() => ArrayStatistics.Maximum(data));
- Assert.Throws(() => ArrayStatistics.OrderStatisticInplace(data, 1));
- Assert.Throws(() => ArrayStatistics.Mean(data));
- Assert.Throws(() => ArrayStatistics.Variance(data));
- Assert.Throws(() => ArrayStatistics.StandardDeviation(data));
- Assert.Throws(() => ArrayStatistics.PopulationVariance(data));
- Assert.Throws(() => ArrayStatistics.PopulationStandardDeviation(data));
- Assert.Throws(() => ArrayStatistics.Covariance(data, data));
- Assert.Throws(() => ArrayStatistics.PopulationCovariance(data, data));
- Assert.Throws(() => ArrayStatistics.MedianInplace(data));
- Assert.Throws(() => ArrayStatistics.QuantileInplace(data, 0.3));
-
- Assert.Throws(() => StreamingStatistics.Minimum(data));
- Assert.Throws(() => StreamingStatistics.Maximum(data));
- Assert.Throws(() => StreamingStatistics.Mean(data));
- Assert.Throws(() => StreamingStatistics.Variance(data));
- Assert.Throws(() => StreamingStatistics.StandardDeviation(data));
- Assert.Throws(() => StreamingStatistics.PopulationVariance(data));
- Assert.Throws(() => StreamingStatistics.PopulationStandardDeviation(data));
- Assert.Throws(() => StreamingStatistics.Covariance(data, data));
- Assert.Throws(() => StreamingStatistics.PopulationCovariance(data, data));
+ // ReSharper disable InvokeAsExtensionMethod
+ Assert.That(() => Statistics.Minimum(data), Throws.Exception);
+ Assert.That(() => Statistics.Maximum(data), Throws.Exception);
+ Assert.That(() => Statistics.Mean(data), Throws.Exception);
+ Assert.That(() => Statistics.Median(data), Throws.Exception);
+ Assert.That(() => Statistics.Quantile(data, 0.3), Throws.Exception);
+ Assert.That(() => Statistics.Variance(data), Throws.Exception);
+ Assert.That(() => Statistics.StandardDeviation(data), Throws.Exception);
+ Assert.That(() => Statistics.PopulationVariance(data), Throws.Exception);
+ Assert.That(() => Statistics.PopulationStandardDeviation(data), Throws.Exception);
+ Assert.That(() => Statistics.Covariance(data, data), Throws.Exception);
+ Assert.That(() => Statistics.PopulationCovariance(data, data), Throws.Exception);
+ // ReSharper restore InvokeAsExtensionMethod
+
+ Assert.That(() => SortedArrayStatistics.Minimum(data), Throws.Exception.TypeOf());
+ Assert.That(() => SortedArrayStatistics.Minimum(data), Throws.Exception.TypeOf());
+ Assert.That(() => SortedArrayStatistics.Maximum(data), Throws.Exception.TypeOf());
+ Assert.That(() => SortedArrayStatistics.OrderStatistic(data, 1), Throws.Exception.TypeOf());
+ Assert.That(() => SortedArrayStatistics.Median(data), Throws.Exception.TypeOf());
+ Assert.That(() => SortedArrayStatistics.LowerQuartile(data), Throws.Exception.TypeOf());
+ Assert.That(() => SortedArrayStatistics.UpperQuartile(data), Throws.Exception.TypeOf());
+ Assert.That(() => SortedArrayStatistics.Percentile(data, 30), Throws.Exception.TypeOf());
+ Assert.That(() => SortedArrayStatistics.Quantile(data, 0.3), Throws.Exception.TypeOf());
+ Assert.That(() => SortedArrayStatistics.QuantileCustom(data, 0.3, 0, 0, 1, 0), Throws.Exception.TypeOf());
+ Assert.That(() => SortedArrayStatistics.QuantileCustom(data, 0.3, QuantileDefinition.Nearest), Throws.Exception.TypeOf());
+ Assert.That(() => SortedArrayStatistics.InterquartileRange(data), Throws.Exception.TypeOf());
+ Assert.That(() => SortedArrayStatistics.FiveNumberSummary(data), Throws.Exception.TypeOf());
+
+ Assert.That(() => ArrayStatistics.Minimum(data), Throws.Exception.TypeOf());
+ Assert.That(() => ArrayStatistics.Maximum(data), Throws.Exception.TypeOf());
+ Assert.That(() => ArrayStatistics.OrderStatisticInplace(data, 1), Throws.Exception.TypeOf());
+ Assert.That(() => ArrayStatistics.Mean(data), Throws.Exception.TypeOf());
+ Assert.That(() => ArrayStatistics.Variance(data), Throws.Exception.TypeOf());
+ Assert.That(() => ArrayStatistics.StandardDeviation(data), Throws.Exception.TypeOf());
+ Assert.That(() => ArrayStatistics.PopulationVariance(data), Throws.Exception.TypeOf());
+ Assert.That(() => ArrayStatistics.PopulationStandardDeviation(data), Throws.Exception.TypeOf());
+ Assert.That(() => ArrayStatistics.Covariance(data, data), Throws.Exception.TypeOf());
+ Assert.That(() => ArrayStatistics.PopulationCovariance(data, data), Throws.Exception.TypeOf());
+ Assert.That(() => ArrayStatistics.MedianInplace(data), Throws.Exception.TypeOf());
+ Assert.That(() => ArrayStatistics.QuantileInplace(data, 0.3), Throws.Exception.TypeOf());
+
+ Assert.That(() => StreamingStatistics.Minimum(data), Throws.Exception.TypeOf());
+ Assert.That(() => StreamingStatistics.Maximum(data), Throws.Exception.TypeOf());
+ Assert.That(() => StreamingStatistics.Mean(data), Throws.Exception.TypeOf());
+ Assert.That(() => StreamingStatistics.Variance(data), Throws.Exception.TypeOf());
+ Assert.That(() => StreamingStatistics.StandardDeviation(data), Throws.Exception.TypeOf());
+ Assert.That(() => StreamingStatistics.PopulationVariance(data), Throws.Exception.TypeOf());
+ Assert.That(() => StreamingStatistics.PopulationStandardDeviation(data), Throws.Exception.TypeOf());
+ Assert.That(() => StreamingStatistics.Covariance(data, data), Throws.Exception.TypeOf());
+ Assert.That(() => StreamingStatistics.PopulationCovariance(data, data), Throws.Exception.TypeOf());
}
[Test]