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

3

我有两个矩阵,XY,每一列代表一个随机变量的多个实现;

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

And where Y is a function of 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表示向量的共轭转置

在matlab中,当我对矩阵(每个矩阵包含1000次20个变量的试验)运行cov(X,Y)时,我只会得到一个2x2的矩阵,这让我相信它以某种方式将每个矩阵视为单个“变量”。如果我连接两个矩阵并对结果调用cov

cov( [X Y] )

我得到了一个40x40的矩阵,在左上角是cov(X)的结果,在右下角是cov(Y)的结果,在左上角和右下角之外是我想要的矩阵。但是有没有一种方法可以在不必求助于这个矩阵的情况下计算它呢?
谢谢。
1个回答

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()函数代替。


非常好用,而且作为额外的奖励,我以前从未使用过bsxfun!非常感谢这个提示! - staticfloat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接