大家好,
经过查看StackOverflow和更广泛的互联网,我仍然无法有效地使用LINQ计算百分位数。
其中percentile是统计学中使用的一种指标,表示在一组观察值中,有多少比例的观察值低于该值。下面的示例尝试将值列表转换为数组,其中每个(唯一)值都用其关联的百分位数表示。列表的min()和max()必然是返回的数组百分位数的0%和100%。
使用LINQPad,以下代码生成所需的输出VP[]:
void Main()
{
var list = new List<double> {1,2,3};
double denominator = list.Count - 1;
var answer = list.Select(x => new VP
{
Value = x,
Percentile = list.Count(y => x > y) / denominator
})
//.GroupBy(grp => grp.Value) --> commented out until attempted duplicate solution
.ToArray();
answer.Dump();
}
public struct VP
{
public double Value;
public double Percentile;
}
然而,当“列表”包含重复条目时(例如1,2,**2,**3),这将返回一个不正确的VP[]:
欢迎提出所有建议,包括是否考虑到了使用“list.Count(y => x > y)”进行重复迭代的效率问题。
感谢您一如既往的支持! Shannon