Summing few sequences in a vector
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
George Tsintsadze
am 20 Dez. 2016
Kommentiert: Walter Roberson
am 20 Dez. 2016
How can I sum few sequences in a vector? For example, if I have the vector:
A = [1 1 0 4 1 1 0 2 1 1 1]
I want to get the vector:
B = [2 6 5]
Which is the sum of sequences separated by zero.
Of curse I wand to do it without any for/while loops.
Thank you.
0 Kommentare
Akzeptierte Antwort
Walter Roberson
am 20 Dez. 2016
t1 = cumsum(A);
B = diff([0,t1(A==0),B(end)]);
Weitere Antworten (2)
KSSV
am 20 Dez. 2016
Bearbeitet: KSSV
am 20 Dez. 2016
A = [1 1 0 4 1 1 0 2 1 1 1] ;
ne0 = find(A~=0); % Nonzero Elements
i0 = unique([ne0(1) ne0(diff([0 ne0])>1)]); % Segment Start Indices
i1 = ne0([find(diff([0 ne0])>1)-1 length(ne0)]); % Segment End Indices
for k1 = 1:length(i0)
section{k1} = A(i0(k1):i1(k1));
end
iwant = cellfun(@sum,section)
José-Luis
am 20 Dez. 2016
Not particularly efficient but fulfilling the eternal quest for one liners:
result = cellfun(@(x) sum(x((x - '0') > 0 & (x - '0') <= 9 ) - '0'), strsplit(num2str(A),'0'))
2 Kommentare
José-Luis
am 20 Dez. 2016
Because
strsplit(num2str(A),'0')
returns a cell array of character arrays and I wanted to perform the comparisons on numbers. It's just a way of transitioning from characters to numbers. Otherwise some unnecessary blank characters would have been included in the computation.
Please accept the answer that best solves your problem.
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!