推荐开源.NET统计库
时间:2020-03-06 14:46:57 来源:igfitidea点击:
我需要计算一堆数字数据的平均值,标准差,中位数等。我可以使用一个好的开源.NET库吗?我已经找到了NMath,但是它不是免费的,并且可能对我的需求而言是过大的。
解决方案
我在CodeProject网站上找到了这个。看起来它是处理大多数基本统计功能的良好Cclass。
- http://www.codeproject.com/KB/cs/csstatistics.aspx
看一下MathNet,它不是专门用于统计的,但是对于我们想要的内容可能会有有用的功能
怎么样http://ilnumerics.net/或者http://numerics.mathdotnet.com/(从http://www.codeplex.com/dnAnalytics合并)
我认为写自己的书更快,而这正是我需要的。这是代码...
/// <summary> /// Very basic statistical analysis routines /// </summary> public class Statistics { List<double> numbers; public double Sum { get; private set; } public double Min { get; private set; } public double Max { get; private set; } double sumOfSquares; public Statistics() { numbers = new List<double>(); } public int Count { get { return numbers.Count; } } public void Add(double number) { if(Count == 0) { Min = Max = number; } numbers.Add(number); Sum += number; sumOfSquares += number * number; Min = Math.Min(Min,number); Max = Math.Max(Max,number); } public double Average { get { return Sum / Count; } } public double StandardDeviation { get { return Math.Sqrt(sumOfSquares / Count - (Average * Average)); } } /// <summary> /// A simplistic implementation of Median /// Returns the middle number if there is an odd number of elements (correct) /// Returns the number after the midpoint if there is an even number of elements /// Sorts the list on every call, so should be optimised for performance if planning /// to call lots of times /// </summary> public double Median { get { if (numbers.Count == 0) throw new InvalidOperationException("Can't calculate the median with no data"); numbers.Sort(); int middleIndex = (Count) / 2; return numbers[middleIndex]; } } }
你必须要小心。如果浮点算术是完美的,有几种计算标准偏差的方法可以给出相同的答案。它们对于某些数据集都是准确的,但是在某些情况下,它们比其他数据集要好得多。
我在这里提出的方法是最有可能给出错误答案的方法。我自己使用它,直到它撞到我身上。
请参阅比较计算标准偏差的三种方法。
Apache Maths.Common并通过IKVM运行它。
AForge.NET具有AForge.Math命名空间,提供一些基本的统计功能:直方图,均值,中位数,stddev和熵。