Standard deviation ignoring 0s in matrix

Hi all, I have a 295x34 matrix called Absy. I want to take the standard deviation of all the columns, however some columns contain many zeros. I want to ignore the zeros and take the standard deviation (as zeros are only their due to some columns being different size).
Thank you.

 採用された回答

Matt Kindig
Matt Kindig 2012 年 7 月 24 日

1 投票

One easy way would be to convert all zeros to NaN, and then use the nanstd function to ignore the NaNs in the std calculation.
Absy(Absy==0)=NaN;
s = nanstd(Absy,[],1); %column by column std deviation

1 件のコメント

Mate 2u
Mate 2u 2012 年 7 月 24 日
Is their a way to do this with kurtosis also?

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

その他の回答 (1 件)

Jan
Jan 2012 年 7 月 24 日
編集済み: Jan 2012 年 7 月 24 日

0 投票

x = rand(295, 34);
x(rand(size(x)) < 0.1) = 0;
index = (x ~= 0);
sumnz = sum(index, 1);
meanx = sum(x, 1) ./ sumnz;
xm = bsxfun(@minus, x, meanx);
xm(~index) = 0;
s = sqrt(sum(xm .* xm, 1) ./ (sumnz - 1));
[NOT TESTED]

Community Treasure Hunt

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

Start Hunting!

Translated by