最好的方式来使用Math.NET 统计上的功能特性的物体,在一个列表
-
21-12-2019 - |
解决方案
ArrayStatistics
确实希望阵列,因为它是优化了这种特殊情况(这就是为什么它被称为ArrayStatistics).同样地, StreamingStatistics
是的优化用于综合的顺序流,如果没有保持数据存储器中。一般类别,适用于所有类型的输入是的 Statistics
类。
你有没有证实,只需使用皇宫和StreamingStatistics是不是足够快的在你的使用情况?计算这些统计数字的列表,仅仅是50项是几乎没有可衡量的在所有,除非另有说你做一万次,在一个循环。
例Math.NET 数字v3。0.0-alpha7,使用组在列表中以仿效你的定义类型:
using MathNet.Numerics.Statistics;
var data = new List<Tuple<string, double>>
{
Tuple.Create("A", 1.0),
Tuple.Create("B", 2.0),
Tuple.Create("C", 1.5)
};
// using the normal extension methods within `Statistics`
var stdDev1 = data.Select(x => x.Item2).StandardDeviation();
var mean1 = data.Select(x => x.Item2).Mean();
// single pass variant (unfortunately there's no single pass MeanStdDev yet):
var meanVar2 = data.Select(x => x.Item2).MeanVariance();
var mean2 = meanVar2.Item1;
var stdDev2 = Math.Sqrt(meanVar2.Item2);
// directly using the `StreamingStatistics` class:
StreamingStatistics.MeanVariance(data.Select(x => x.Item2));
其他提示
该eaisiest解决方案可使用的是把 皇宫 因此,改变 List
要 阵列
List<SomeClass> list = ...
GetMeanAndStdError(list.ToArray()); // <- Not that good performance
然而,如果perforamance是你的关心,你宁愿的意思是计算和差异的明确(编写自己的功能):
List<SomeClass> list = ...
Double sumX = 0.0;
Double sumXX = 0.0;
foreach (var item in list) {
Double x = item.SomeProperty;
sumX += x;
sumXX += x * x;
}
Double mean = sumX / list.Count;
Double variance = (sumXX / list.Count - mean);
不隶属于 StackOverflow