diff --git a/src/Numerics/Statistics/Histogram.cs b/src/Numerics/Statistics/Histogram.cs
index f33d95a6..f988cce9 100644
--- a/src/Numerics/Statistics/Histogram.cs
+++ b/src/Numerics/Statistics/Histogram.cs
@@ -499,5 +499,49 @@ namespace MathNet.Numerics.Statistics
return sb.ToString();
}
+
+ ///
+ /// Calculate the Distance between two histograms
+ ///
+ /// The histogram that will be compared with this histogram
+ /// The power used for calculating the distance (e.g. 2 for Ecludian distance)
+ /// A delegate for the distance function
+ /// The distance between the two histograms
+ public double HistogramDistance(Histogram h, double power, Func distanceFunction){
+ if (this.BucketCount != h.BucketCount)
+ {
+ throw new ArgumentException("The two histograms must have the same number of buckets");
+ }
+ double[] a1 = new double[this.BucketCount];
+ double[] a2 = new double[this.BucketCount];
+ for (int i = 0; i < this.BucketCount; i++)
+ {
+ a1[i] = this[i].Count;
+ a2[i] = h[i].Count;
+ }
+ return distanceFunction(power, a1, a2);
+ }
+
+ ///
+ /// Calculate the Distance between two histograms
+ ///
+ /// The histogram that will be compared with this histogram
+ /// A delegate for the distance function
+ /// The distance between the two histograms
+ public double HistogramDistance(Histogram h, Func distanceFunction)
+ {
+ if (this.BucketCount != h.BucketCount)
+ {
+ throw new ArgumentException("The two histograms must have the same number of buckets");
+ }
+ double[] a1 = new double[this.BucketCount];
+ double[] a2 = new double[this.BucketCount];
+ for (int i = 0; i < this.BucketCount; i++)
+ {
+ a1[i] = this[i].Count;
+ a2[i] = h[i].Count;
+ }
+ return distanceFunction(a1, a2);
+ }
}
}