0

Matlab の 2 次元相関係数に相当する関数はありますか? 2 つの 1 次元配列で使用したいと思います。 http://www.mathworks.com/help/toolbox/images/ref/corr2.html

編集:私自身の実装

//Assume we have the length and averages of both arrays
//double a_average, b_average
double a_val =0;
double b_val = 0;
double a_sum = 0 ;
double b_sum = 0;
double a_stdev = 0;
double b_stdev  = 0;
int size = a.length; // same as b's length
for (int i = 0 ; i < size ; i ++) {
    a_val =(a[i]- a_average);
    b_val =(b[i] -b_average);
    a_sum += a_val;
    b_sum += b_val;
    a_stdev += Math.pow(a_val,2);
    b_stdev += Math.pow(b_val,2);
}

double coefficient = ((a_sum *b_sum)/(a_stdev*b_stdev))

ありがとう

4

1 に答える 1

0

すべてのデータが既に 2 つの配列に読み込まれていると仮定するとA and B、次のようにします。また、2 つの配列の長さが等しく、NaN 値と Infinity 値がないと仮定します。

また、データ ポイントが 2 つしかないため、相関行列には非対角値が 1 つしか含まれていないため、それを単一の double 値として格納します。

int i;
int len = A.length;
double correlation;
double XX = 0; //normally would be an outer-product matrix
double[] runningSum = new double[2]; //since you have two variables (A and B)
double[] x2 = new double[2];
double[] stdev = new double[2];

for (i = 0; i < length; ++i)
{
   XX += A[i] * B[i];
   x2[0] += Math.Pow(A[i], 2.0);
   x2[1] += Math.Pow(B[i], 2.0);
   runningSum[0] += A[i];
   runningSum[1] += B[i];
}

// Compute mu
runningSum[0] = runningSum[0] / len;
runningSum[1] = runningSum[1] / len;

// Compute std deviation (bias-corrected)
stdev[0] = Math.Sqrt(x2[0] - len * Math.Pow(runningSum[0], 2)) / (len - 1);
stdev[1] = Math.Sqrt(x2[1] - len * Math.Pow(runningSum[1], 2)) / (len - 1);

// now compute correlation coefficient
correlation = (XX - (len * runningSum[0] * runningSum[1])) / (nobs - 1);
correlation = correlation / (stdev[0] * stdev[1]);

これにより、探している答えが得られるはずです。

于 2012-09-02T00:28:23.490 に答える