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