如何在C#中制作MATLAB的corrcoef(相关系数)?

时间:2015-11-09 23:59:56

标签: c# matlab

我有一个列表,其中有许多样本代表来自嘈杂的正弦波的许多幅度值。 我需要找到该波的Pearson相关系数和给定的正弦波(不是噪声)。 (所以我可以从嘈杂的波浪中找到合适的谐波)。 我真正需要的是在C#中的方法中执行相同的过程。 我知道这可以用MATLAB中的corrcoef命令完成。 任何解释或想法都是非常受欢迎的。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

为什么不使用Math.NET Numerics

  

Math.NET Numerics旨在为数字提供方法和算法   科学,工程和日常使用的计算。涵盖的主题   包括特殊函数,线性代数,概率模型,随机   数字,插值,积分,回归,优化问题   等等。

您正在寻找的class编码如下:

namespace MathNet.Numerics.Statistics
{
    using System;
    using System.Collections.Generic;
    using Properties;

    /// <summary>
    /// A class with correlation measures between two datasets.
    /// </summary>
    public static class Correlation
    {
        /// <summary>
        /// Computes the Pearson product-moment correlation coefficient.
        /// </summary>
        /// <param name="dataA">Sample data A.</param>
        /// <param name="dataB">Sample data B.</param>
        /// <returns>The Pearson product-moment correlation coefficient.</returns>
        public static double Pearson(IEnumerable<double> dataA, IEnumerable<double> dataB)
        {
            int n = 0;
            double r = 0.0;
            double meanA = dataA.Mean();
            double meanB = dataB.Mean();
            double sdevA = dataA.StandardDeviation();
            double sdevB = dataB.StandardDeviation();

            IEnumerator<double> ieA = dataA.GetEnumerator();
            IEnumerator<double> ieB = dataB.GetEnumerator();

            while (ieA.MoveNext())
            {
                if (ieB.MoveNext() == false)
                {
                    throw new ArgumentOutOfRangeException("Datasets dataA and dataB need to have the same length.");
                }

                n++;
                r += (ieA.Current - meanA) * (ieB.Current - meanB) / (sdevA * sdevB);
            }
            if (ieB.MoveNext() == true)
            {
                throw new ArgumentOutOfRangeException("Datasets dataA and dataB need to have the same length.");
            }

            return r / (n - 1);
        }
    }
}


Math.NET Numerics works very well with C# and related .Net languages. When using Visual Studio or another IDE with built-in NuGet support, you can get started quickly by adding a reference to the MathNet.Numerics NuGet package. Alternatively you can grab that package with the command line tool with nuget.exe install MathNet.Numerics -Pre or simply download the Zip package.

我已经集中使用了这个库,效果很好。所以你会像以下一样使用它:

using MathNet.Numerics.Statistics;

correlation = Correlation.Pearson(arrayOfDoubles1, arrayOfDoubles2);