standard deviation of non-zero elements of columns of a matrix

6 ビュー (過去 30 日間)
osminbas
osminbas 2012 年 3 月 1 日
回答済み: David Freese 2013 年 10 月 11 日
Hello,
How can I find the standard deviation of each column of a matrix ignoring the zero values? I must add that I do not have the stats package so I cannot use nanstd! Thank you!

採用された回答

the cyclist
the cyclist 2012 年 3 月 1 日
Here is a straightforward way.
% Some input data
x = rand(7,6);
x(1,1) = 0; % Put in a couple zeros by hand
x(6,5) = 0;
% Preallocate the array that will hold the standard deviations
sd = zeros(1,6);
% Calculate and store the standard deviations of the non-zero elements.
for nc = 1:6
indexToNonZero = x(:,nc)~=0;
sd(nc) = std(x(indexToNonZero,nc));
end

その他の回答 (2 件)

Walter Roberson
Walter Roberson 2012 年 3 月 1 日
There is a MATLAB File Exchange contribution to provide these functions.

David Freese
David Freese 2013 年 10 月 11 日
A way to go about it using just matrix operations:
% Some input data
x = rand(7,6);
x(1,1) = 0; % Put in a couple zeros by hand
x(6,5) = 0;
% Calculate and store the standard deviations of the non-zero elements.
% using the identity std^2 = Var(x) = mean(x.^2,2) - mean(x,2).^2
avg = sum(x,2)./sum(x~=0,2);
sd = sqrt(sum(x.^2,2)./sum(x~=0,2) - avg.^2);
% Zero out any of the columns that were all zeros
sd(isnan(sd)) = 0;

カテゴリ

Help Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by