standard deviation of non-zero elements of columns of a matrix
9 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
osminbas
am 1 Mär. 2012
Beantwortet: David Freese
am 11 Okt. 2013
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!
0 Kommentare
Akzeptierte Antwort
the cyclist
am 1 Mär. 2012
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
Weitere Antworten (2)
Walter Roberson
am 1 Mär. 2012
There is a MATLAB File Exchange contribution to provide these functions.
0 Kommentare
David Freese
am 11 Okt. 2013
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;
0 Kommentare
Siehe auch
Kategorien
Mehr zu Time Series finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!