Browse Source

BREAKING: Statistics: Ranks and RankInplace of single precision to return single precision arrays #364

spatial
Christoph Ruegg 9 years ago
parent
commit
0602352705
  1. 38
      src/Numerics/Statistics/ArrayStatistics.Single.cs
  2. 2
      src/Numerics/Statistics/Statistics.cs

38
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.
/// </summary>
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;
}
}
}
}

2
src/Numerics/Statistics/Statistics.cs

@ -1267,7 +1267,7 @@ namespace MathNet.Numerics.Statistics
/// </summary>
/// <param name="data">The data sample sequence.</param>
/// <param name="definition">Rank definition, to choose how ties should be handled and what product/definition it should be consistent with</param>
public static double[] Ranks(this IEnumerable<float> data, RankDefinition definition = RankDefinition.Default)
public static float[] Ranks(this IEnumerable<float> data, RankDefinition definition = RankDefinition.Default)
{
float[] array = data.ToArray();
return ArrayStatistics.RanksInplace(array, definition);

Loading…
Cancel
Save