我有两个矩阵,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 中,当我在矩阵上运行 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/