MATLAB中两个矩阵之间的协方差

时间:2011-10-08 22:35:01

标签: matlab matrix covariance

我有两个基质, X Y ,每列代表一个随机变量的多个实现;

X = [x_11  x_21  .... x_n1
     x_12  x_22  .... x_n2
      .     .    ....  .
      .     .    ....  .
     x_1m  x_2m  .... x_nm]

其中Y是X的函数:Y = f(X)

Y = [y_11  y_21  .... y_n1
     y_12  y_22  .... y_n2
      .     .    ....  .
      .     .    ....  .
     y_1m  y_2m  .... y_nm]

我想找到变量x_n和y_n之间的协方差矩阵;

E{(X - E{Y}) * (Y - E{Y})^H}

其中()^ H表示向量的Hermitian Transpose

在matlab中,当我在matricies上运行cov(X,Y)时,(每20次变量的1000次试验)我只得到一个2x2矩阵,这让我相信它将每个矩阵视为一个单一的“变量” “ 不知何故。如果我连接两个matricies并在结果上调用cov

cov( [X Y] )

我得到一个40x40矩阵,左上角是cov( X ),右下角是cov( Y )的结果,右上角和左下角是我想要的矩阵,但是有没有办法计算这个而不必诉诸于此?

由于

1 个答案:

答案 0 :(得分:5)

cov(X,Y)相当于cov([x(:) y(:)])。但是[x(:) y(:)]对你来说是20000乘2,cov()将行视为观察,将列视为维度,因此你得到一个2乘2的协方差矩阵。

我会按照定义自己实现它:

bsxfun(@minus,x,mean(x))'*bsxfun(@minus,y,mean(y))/(size(x,1)-1)

如果您的旧版本的matlab不支持bsxfun(),请使用repmat()