Tag: 百分位数

百分位数计算

我想在C# (或某些伪代码)中模仿Excel等效PERCENTILE函数。 我怎样才能做到这一点? 该函数应该采用两个参数,其中第一个是值列表,第二个是函数应该计算的百分位数。 坦克! 编辑:我很抱歉,如果我的问题发生了,就像我没有尝试过我自己。 我只是无法理解excel函数是如何工作的(是的,我首先尝试了维基百科和wolfram)并且我认为如果有人在代码中提出它我会更好理解。 @CodeInChaos给出了一个似乎就是我所追求的答案。

用于计算百分位数以移除exception值的快速算法

我有一个程序需要重复计算数据集的近似百分位数(顺序统计),以便在进一步处理之前删除exception值。 我目前正在通过对值数组进行排序并选择适当的元素来实现这一目标; 这是可行的,但尽管是该计划的一个相当小的部分,但它在配置文件上是一个明显的昙花一现。 更多信息: 该数据集包含最多100000个浮点数的数量级,并假设“合理地”分布 – 在特定值附近不太可能存在重复,密度也不大; 如果由于某种奇怪的原因,分布是奇数,那么近似值就不太准确了,因为数据可能无论如何都搞砸了,并且进一步处理可疑。 但是,数据不一定是统一的或正态分布的; 它不太可能退化。 一个近似的解决方案很好,但我需要了解近似值如何引入错误以确保它有效。 由于目标是去除exception值,我在任何时候都在同一数据上计算两个百分点:例如一个在95%,一个在5%。 该应用程序在C#中,在C ++中有点繁重; 任何一个伪代码或预先存在的库都可以。 一个完全不同的去除exception值的方法也可以,只要它是合理的。 更新:似乎我正在寻找一种近似选择算法 。 虽然这都是在一个循环中完成的,但每次数据都会略微不同,因此重用数据结构并不像这个问题那样容易。 实施解决方案 使用Gronim建议的维基百科选择算法将这部分运行时间缩短了大约20倍。 由于我找不到C#实现,这就是我想出的。 即使对于小型输入,它也比Array.Sort更快; 在1000个元素上,速度提高了25倍。 public static double QuickSelect(double[] list, int k) { return QuickSelect(list, k, 0, list.Length); } public static double QuickSelect(double[] list, int k, int startI, int endI) { while (true) { // Assume […]