Standard deviation of a 3-d matrix

hi I have a matrix with size(y)=(200*1*4). I want to calculate the std for each (200*1) vector separately. When I used "std(y(y>0)), it gave me an value but I want in fact 4 values for each 200*1 vector size. How can I write the code to give me the std for each inner vector without "for",and ....
Thanks for your help

 採用された回答

Kye Taylor
Kye Taylor 2012 年 7 月 13 日

1 投票

If y is 200-by-1-by-4, you can get rid of the singleton dimension using
y2D = squeeze(y);
then compute the 4 different standard deviations using
the4Sigmas = std(y2D);

3 件のコメント

Andrea
Andrea 2012 年 7 月 13 日
thanks, it was so useful. But now another question is :
I want to calculate the std for > 0. the4Sigmas = std(y2D); give me (1 by 4) value for std but when I wrote the4Sigmas = std(y2D(y2D>0)); it gave me gain a single values while I want the std to be like before (1 by 4).
Can you please help me again?
Kye Taylor
Kye Taylor 2012 年 7 月 13 日
編集済み: Kye Taylor 2012 年 7 月 13 日
Sure, but next time, ask a brand new question.
I would then use a for loop
sigmasPositive = zeros(1,4);
for j = 1:size(y2D,2)
idxOfInterest = y2D(:,j) > 0;
sigmasPositive(j) = std(y2D(idxOfInterest,j));
end
or you can avoid the loop using
z = mat2cell(y2D,size(y2D,1),ones(1,size(y2D,2)));
sigmasPositiveNoLoop = cellfun(@(c)std(c(c>0)),z);
Andrea
Andrea 2012 年 7 月 13 日
Thanks a lot. I've already done that. but a little late. It works perfectly.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

製品

Community Treasure Hunt

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

Start Hunting!

Translated by