Standard deviation of a 3-d matrix

1 vue (au cours des 30 derniers jours)
Andrea
Andrea le 13 Juil 2012
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

Réponse acceptée

Kye Taylor
Kye Taylor le 13 Juil 2012
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 commentaires
Kye Taylor
Kye Taylor le 13 Juil 2012
Modifié(e) : Kye Taylor le 13 Juil 2012
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 le 13 Juil 2012
Thanks a lot. I've already done that. but a little late. It works perfectly.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Random Number Generation dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by