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

标签 matlab matrix covariance

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

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 中,当我在矩阵上运行 cov(X,Y) 时,(每 1000 次试验 20 个变量)我只得到一个 2x2 矩阵,这让我相信它是以某种方式将每个矩阵视为一个“变量”。如果我连接两个矩阵并对结果调用 cov:

cov( [X Y] )

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

谢谢

最佳答案

cov(X,Y) 等同于 cov([x(:) y(:)])。但是 [x(:) y(:)] 对你来说是 20000 x 2,并且 cov() 将行视为观察值,将列视为维度,所以你得到 2通过 2 协方差矩阵。

我会根据定义自己实现它:

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

如果您有不支持 bsxfun() 的旧版 matlab,只需使用 repmat()

关于matlab - MATLAB 中两个矩阵之间的协方差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7700202/

相关文章:

c - 在 Linux 中将 MATLAB 输出与 C/C++ 程序集成

matlab - 从矩阵中提取每第 n 列

swift - Swift 中的矩阵逆

C#不理解委托(delegate)的协变和逆变

entity-framework - 为什么 DbSet 不是协变的?

c# - 分配 IEnumerable(协方差)

MATLAB 示例失败

matlab - Matlab中的矩阵运算

c - MATLAB tic-toc & C 的时钟差异

algorithm - 多种背包变化