百分位数计算

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

坦克!

编辑:我很抱歉,如果我的问题发生了,就像我没有尝试过我自己。 我只是无法理解excel函数是如何工作的(是的,我首先尝试了维基百科和wolfram)并且我认为如果有人在代码中提出它我会更好理解。 @CodeInChaos给出了一个似乎就是我所追求的答案。

我认为维基百科页面有你需要编写自己的函数的公式…
我试过这个:

 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之间的百分位值(因此我更改了我的代码以使用维基百科公式实现此目的)和另一种用于计算n的方法(因此我更改了注释的方法)。

试图在以下url重现结果: http : //www.techonthenet.com/excel/formulas/percentile.php我想出了:

 public static double Percentile(IEnumerable seq,double percentile) { var elements=seq.ToArray(); Array.Sort(elements); double realIndex=percentile*(elements.Length-1); int index=(int)realIndex; double frac=realIndex-index; if(index+1 

(不处理NaN和无穷大)。

一些测试用例:

 Percentile(new double[]{1,2,3,4}, 0.8).Dump();// 3.4 Percentile(new double[]{7,8,9,20}, 0.35).Dump();// 8.05 Percentile(new double[]{1,2,3,4}, 0.3).Dump();// 1.9 

将值添加到列表,对该列表进行排序,并获取索引值ceil(列表的长度*百分位数)。