diff --git a/src/Numerics/Statistics/ArrayStatistics.Single.cs b/src/Numerics/Statistics/ArrayStatistics.Single.cs
index 7614cf12..9cba31de 100644
--- a/src/Numerics/Statistics/ArrayStatistics.Single.cs
+++ b/src/Numerics/Statistics/ArrayStatistics.Single.cs
@@ -759,9 +759,9 @@ namespace MathNet.Numerics.Statistics
/// with an existing system.
/// WARNING: Works inplace and can thus causes the data array to be reordered.
///
- public static double[] RanksInplace(float[] data, RankDefinition definition = RankDefinition.Default)
+ public static float[] RanksInplace(float[] data, RankDefinition definition = RankDefinition.Default)
{
- var ranks = new double[data.Length];
+ var ranks = new float[data.Length];
var index = new int[data.Length];
for (int i = 0; i < index.Length; i++)
{
@@ -803,5 +803,39 @@ namespace MathNet.Numerics.Statistics
RanksTies(ranks, index, previousIndex, data.Length, definition);
return ranks;
}
+
+ static void RanksTies(float[] ranks, int[] index, int a, int b, RankDefinition definition)
+ {
+ // TODO: potential for PERF optimization
+ float rank;
+ switch (definition)
+ {
+ case RankDefinition.Average:
+ {
+ rank = (b + a - 1) / 2f + 1;
+ break;
+ }
+
+ case RankDefinition.Min:
+ {
+ rank = a + 1;
+ break;
+ }
+
+ case RankDefinition.Max:
+ {
+ rank = b;
+ break;
+ }
+
+ default:
+ throw new NotSupportedException();
+ }
+
+ for (int k = a; k < b; k++)
+ {
+ ranks[index[k]] = rank;
+ }
+ }
}
}
diff --git a/src/Numerics/Statistics/Statistics.cs b/src/Numerics/Statistics/Statistics.cs
index b1c887f9..04a04ca1 100644
--- a/src/Numerics/Statistics/Statistics.cs
+++ b/src/Numerics/Statistics/Statistics.cs
@@ -1267,7 +1267,7 @@ namespace MathNet.Numerics.Statistics
///
/// The data sample sequence.
/// Rank definition, to choose how ties should be handled and what product/definition it should be consistent with
- public static double[] Ranks(this IEnumerable data, RankDefinition definition = RankDefinition.Default)
+ public static float[] Ranks(this IEnumerable data, RankDefinition definition = RankDefinition.Default)
{
float[] array = data.ToArray();
return ArrayStatistics.RanksInplace(array, definition);