Sum only consecutive positive numbers...
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi all, I need help. So, I have this vector:
l = [1 2 -3 4 -5 6 7 -8 9 10 11 12];
I need sum only consecutive positive numbers. when picking up a negative number, put NaN. So, the results correct is:
a = [3 NaN 4 NaN 13 NaN 42];
Thank you!
Best regards.
Antworten (3)
ANKUR KUMAR
am 30 Okt. 2017
A = [1 2 -3 4 -5 6 7 -8 9 10 11 12];
A(A<=0)=nan;
nansum(A)
2 Kommentare
Walter Roberson
am 30 Okt. 2017
No, this gives a grand total of the positive values, rather than giving the required output vector.
Image Analyst
am 30 Okt. 2017
Here's one way:
m = [1 2 -3 4 -5 6 7 -8 9 10 11 12]
dm = [1. diff(m)]
mask = (m > 0) & (dm >= 0)
props = regionprops(mask, m, 'Area', 'MeanIntensity');
sums = [props.Area] .* [props.MeanIntensity]
% Add in nan's
sums = [sums; nan(1, length(sums))]
sums = sums(:)'
% Get rid of last nan.
sums = sums(1:end-1)
0 Kommentare
Andrei Bobrov
am 30 Okt. 2017
Bearbeitet: Andrei Bobrov
am 30 Okt. 2017
l = [1 2 -3 4 -5 6 7 -8 9 10 11 12];
lo = l > 0;
h = cumsum(diff([0;lo(:)]) == 1).*lo(:);
S = accumarray(h + 1,l);
out = nan(numel(S)*2-1,1);
out(1:2:end) = S;
or
l = [1 2 -3 4 -5 6 7 -8 9 10 11 12];
lo = l > 0;
h = diff([~lo(1),lo])~=0;
out = accumarray(cumsum(h(:)),l);
out(out < 0) = nan;
0 Kommentare
Siehe auch
Kategorien
Mehr zu NaNs 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!