Standard deviation of a 3-d matrix
2 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
采纳的回答
Kye Taylor
2012-7-13
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 个评论
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);
更多回答(0 个)
另请参阅
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!