推荐开源.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和熵。

