矩阵的协方差矩阵是对称阵,用公式Cov(X, Y) = E[X * Y] - E[X] E[Y] 计算,其中E[X]和E[Y]是列的平局值,E[X*Y]是样本方差,可以用变换成Gramian矩阵减去E[X] E[Y] 后除以n-1,这样Cov(X, Y) = E[X * Y] - E[X] E[Y] 变换为 G[X*Y] /(m-1) - (m/m-1)E[X] E[Y].Gramian矩阵就是协方差的和。
这个逻辑就是Spark RowMatrix求协方差的逻辑,只不过运算的是RDD
代码如下
public class CovarianceTest
{
public static void main( String[] args )
{
double[][] test = new double[][]{
new double[]{
1, 2, 3
}, new double[]{
4, 5, 6
}, new double[]{
7, 8, 9
}
};
double[][] value = caleCovariance( test );
System.out.println( "done" );
<