一尘不染

百分位数计算

algorithm

我想用C#(或用一些伪代码)模仿Excel等效的PERCENTILE函数。我怎样才能做到这一点?该函数应带有两个参数,第一个是值列表,第二个是函数应计算的百分位数。

坦克!

编辑:
很抱歉,如果我遇到自己未曾尝试过的问题。我只是不明白excel函数是如何工作的(是的,我先尝试了Wikipedia和Wolfram),我想如果有人用代码展示它,我会更好地理解它。@CodeInChaos给出的答案似乎就是我所追求的。


阅读 957

收藏
2020-07-28

共1个答案

一尘不染

我认为Wikipedia页面包含您需要编写自己的函数的公式…
我尝试过此操作:

public double Percentile(double[] sequence, double excelPercentile)
{
    Array.Sort(sequence);
    int N = sequence.Length;
    double n = (N - 1) * excelPercentile + 1;
    // Another method: double n = (N + 1) * excelPercentile;
    if (n == 1d) return sequence[0];
    else if (n == N) return sequence[N - 1];
    else
    {
         int k = (int)n;
         double d = n - k;
         return sequence[k - 1] + d * (sequence[k] - sequence[k - 1]);
    }
}

在CodeInChaos注释之后进行编辑:
Excel使用0到1之间的百分位值(因此我更改了代码以使用Wikipedia公式实现此值),并使用另一种方法来计算n(因此我更改了注释的值)。

2020-07-28