gpt4 book ai didi

c# - C#中两个数组的相关性

转载 作者:IT王子 更新时间:2023-10-29 04:40:25 24 4
gpt4 key购买 nike

有两个 double 值数组,我想计算相关系数(单个 double 值,就像 MS Excel 中的 CORREL 函数一样)。在 C# 中有一些简单的单行解决方案吗?

我已经发现了名为 Meta Numerics 的数学库。根据this SO question ,它应该做的工作。 Here是 Meta Numerics 相关方法的文档,我没有得到。

有人可以向我提供简单的代码片段或示例如何使用该库吗?

Note: At the end, I was forced to use one of custom implementations. But if someone reading this question knows good, well documented C# math library/framework to do this, please don't hesitate and post a link in answer.

最佳答案

您可以将值放在同一索引的不同列表中,并使用简单的 Zip .

var fitResult = new FitResult();
var values1 = new List<int>();
var values2 = new List<int>();

var correls = values1.Zip(values2, (v1, v2) =>
fitResult.CorrelationCoefficient(v1, v2));

第二种方法是编写您自己的自定义实现(我的未针对速度进行优化):

public double ComputeCoeff(double[] values1, double[] values2)
{
if(values1.Length != values2.Length)
throw new ArgumentException("values must be the same length");

var avg1 = values1.Average();
var avg2 = values2.Average();

var sum1 = values1.Zip(values2, (x1, y1) => (x1 - avg1) * (y1 - avg2)).Sum();

var sumSqr1 = values1.Sum(x => Math.Pow((x - avg1), 2.0));
var sumSqr2 = values2.Sum(y => Math.Pow((y - avg2), 2.0));

var result = sum1 / Math.Sqrt(sumSqr1 * sumSqr2);

return result;
}

用法:

var values1 = new List<double> { 3, 2, 4, 5 ,6 };
var values2 = new List<double> { 9, 7, 12 ,15, 17 };

var result = ComputeCoeff(values1.ToArray(), values2.ToArray());
// 0.997054485501581

Debug.Assert(result.ToString("F6") == "0.997054");

另一种方法是直接使用Excel函数:

var values1 = new List<double> { 3, 2, 4, 5 ,6 };
var values2 = new List<double> { 9, 7, 12 ,15, 17 };

// Make sure to add a reference to Microsoft.Office.Interop.Excel.dll
// and use the namespace

var application = new Application();

var worksheetFunction = application.WorksheetFunction;

var result = worksheetFunction.Correl(values1.ToArray(), values2.ToArray());

Console.Write(result); // 0.997054485501581

关于c# - C#中两个数组的相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17447817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com