【发布时间】:2016-08-15 02:44:21
【问题描述】:
我多次计算Pearson correlation(平均用户/项目评级),使用我当前的代码性能非常糟糕:
public double ComputeCorrelation(double[] x, double[] y, double[] meanX, double[] meanY)
{
if (x.Length != y.Length)
throw new ArgumentException("values must be the same length");
double sumNum = 0;
double sumDenom = 0;
double denomX = 0;
double denomY = 0;
for (int a = 0; a < x.Length; a++)
{
sumNum += (x[a] - meanX[a]) * (y[a] - meanY[a]);
denomX += Math.Pow(x[a] - meanX[a], 2);
denomY += Math.Pow(y[a] - meanY[a], 2);
}
var sqrtDenomX = Math.Sqrt(denomX);
var sqrtDenomY = Math.Sqrt(denomY);
if (sqrtDenomX == 0 || sqrtDenomY == 0) return 0;
sumDenom = Math.Sqrt(denomX) * Math.Sqrt(denomY);
var correlation = sumNum / sumDenom;
return correlation;
}
我正在使用与MathNet.Numerics 的标准 Pearson 相关性,但这是对标准的修改,无法使用它。有没有办法加快速度?如何针对时间复杂度进行优化?
【问题讨论】:
-
我觉得这个问题最好在这里问codereview.stackexchange.com
-
我们可以通过查看代码做出一些假设,但我们不知道这些假设实际上提高了多少性能。您应该通过分析器运行它以真正查看导致缓慢的原因。
标签: c# arrays performance pearson-correlation