Standard deviation ignoring 0s in matrix

24 ビュー (過去 30 日間)
Mate 2u
Mate 2u 2012 年 7 月 24 日
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 日
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.
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 2012 年 7 月 24 日
編集済み: Jan 2012 年 7 月 24 日
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));


Help Center および File ExchangeData Type Conversion についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by