Question on covariance matrix loop

Really basic question from a beginner- I have a 60,000 by 4 matrix (AB) and want to calculate 2000 covariance matrices ( every 30 rows down, and all four columns).
Do you guys know whats wrong with my logic? The below sample loops the 2nd and third covariance matrices.
for i = 1:2 j=i*31; k= j+30; VarCov(i) = cov(AB( j:k ,:)); end
I get an error message of:
In an assignment A(I) = B, the number of elements in B and
I must be the same.
But doesnt varcov consists of 2 matrices??

回答(2 个)

If you want to stack 2000 cov matrices then you may want to use 3D matrices,
VarCov(:,:,i) = cov(AB(j:k,:));
Here for each i you will have a 4x4 cov matrix
a=rand(60000,4);
b=permute(reshape(a',4,30,[]),[2 1 3]);
for k=1:size(b,3)
s{k,1}=cov(b(:,:,k));
end
out=cell2mat(s);

2 个评论

Thanks!- This works great. If I want to create an average of the 2000 matrices (stored as "s"), does mean(s,3) work?
What is the size of the average result?

请先登录,再进行评论。

类别

在 帮助中心 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息

提问:

2013-10-30

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by