Converting Covariance Matrix to Correlation Matrix
8 views (last 30 days)
Show older comments
I know of MATLAB function to convert a covariance matrix to a correlation matrix but I'm a teacher and want to demonstrate matrix manipulation. I can do the conversion using for loops as below but can't figure out how to do this more elegantly (using matrix operations).
d=diag(cov).^.5;
for i=1:length(cov)
for j=1:length(cov)
corr(i,j)=cov(i,j)./(d(i)*d(j));
end
end
Thanks in advance for any help.
0 Comments
Answers (3)
Peter Perkins
on 14 Oct 2014
Jim, if you mean, "matrix operations" as in "something out of a math book", then you can right and left multiply by diag(d), where d is 1./sqrt(diag(C)). If you mean "MATLAB matrix operations", then you can use ./ with d*d'.
You might find it interesting to look at the guts of corrcoef, where the code takes a bit more care.
Hope this helps.
2 Comments
Peter Perkins
on 24 Oct 2014
Sorry, I think I meant diag(1./sqrt(diag(C))). If C is a 3x3 cov matrix, then diag(C) is a vector, and diag(1./sqrt(diag(C))) is a 3x3 diagonal matrix.
James Tursa
on 24 Oct 2014
Edited: James Tursa
on 24 Oct 2014
A method using outer product and element-wise divide:
d = sqrt(diag(cov));
corr = cov./(d*d');
Matt J
on 24 Oct 2014
corr=bsxfun(@rdivide,cov, d(:));
corr=bsxfun(@rdivide, corr,d(:).');
0 Comments
See Also
Categories
Find more on Calendar in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!