输入:随机向量X = xi,i = 1..n。
X = meanxi,i = 1..n的均值向量
输出:协方差矩阵Sigma(n * n)。
计算:
1)找到所有的cov(xi,xj)= 1 / n *(xi-meanxi)*(xj-meanxj),i,j = 1..n
2)Sigma(i,j)= cov(xi,xj),对称矩阵
该算法是否正确并且没有副作用?
答案 0 :(得分:4)
每个xi
应该是一个矢量(随机变量),它有自己的方差和均值。
协方差矩阵是对称的,所以你只需要计算它的一半(并复制其余的)并在主对角线上具有xi的方差。
S = ...// your symmetric matrix n*n
for(int i=0; i<n;i++)
S(i,i) = var(xi);
for(j = i+1; j<n; j++)
S(i,j) = cov(xi, xj);
S(j,i) = S(i,j);
end
end
其中xi的方差(var):
v = 0;
for(int i = 0; i<xi.Count; i++)
v += (xi(i) - mean(xi))^2;
end
v = v / xi.Count;
和协方差(cov)
cov(xi, xj) = r(xi,xj) * sqrt(var(xi)) * sqrt(var(xj))
其中r(xi, xj)
为Pearson product-moment correlation coefficient
修改强>
或者,因为cov(X,Y)= E(X * Y) - E(X)* E(Y)
cov(xi, xj) = mean(xi.*xj) - mean(xi)*mean(xj);
其中.*
是类似Matlab的元素乘法
因此,如果x = [x1, x2]
,y = [y1, y2]
则z = x.*y = [x1*y1, x2*y2]
;