Расчет процентилей

Я хочу имитировать функцию PERCENTILE, эквивалентную Excel, в C # (или в каком-то псевдокоде). Как я могу это сделать? Функция должна принимать два аргумента, где первый - это список значений, а второй - для какого процентиля функция должна рассчитывать.

Танки!

Изменить: Мне очень жаль, если мой вопрос возник так, как будто я сам не пробовал. Я просто не мог понять, как работает функция excel (да, я сначала попробовал википедию и вольфрам), и я подумал, что пойму это лучше, если кто-то представит это в коде. @ CodeInChaos дал ответ, похоже, именно то, что мне нужно.

23
задан picknick 15 November 2011 в 14:15
поделиться

1 ответ

Пытаясь воспроизвести результаты по адресу: http://www.techonthenet.com/excel/formulas/percentile.php Я придумал:

public static double Percentile(IEnumerable<double> 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<elements.Length)
        return elements[index]*(1-frac)+elements[index+1]*frac;
    else
        return elements[index];
}

(Не обрабатывать 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
18
ответ дан 29 November 2019 в 01:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: