これは簡潔な計算方法か?
この計算式は直感的に分かりにくいし、じつのところたいして計算量が減るわけでもない。ただし、いったん平均を計算する必要が無いのでループが1回ですみ、コードが簡潔になる。
C言語のコード
double correl(const double x[], const double y[], int n) { double sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0, sumY2 = 0; for (int i = 0; i < n; i++) { sumX += x[i]; sumY += y[i]; sumXY += x[i] * y[i]; sumX2 += x[i] * x[i]; sumY2 += y[i] * y[i]; } double numerator = n * sumXY - sumX * sumY; double denominator = sqrt((n * sumX2 - sumX * sumX) * (n * sumY2 - sumY * sumY)); return numerator / denominator; }