Summing few sequences in a vector

조회 수: 2 (최근 30일)
George Tsintsadze
George Tsintsadze 2016년 12월 20일
댓글: Walter Roberson 2016년 12월 20일
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.

채택된 답변

Walter Roberson
Walter Roberson 2016년 12월 20일
t1 = cumsum(A);
B = diff([0,t1(A==0),B(end)]);
  댓글 수: 2
George Tsintsadze
George Tsintsadze 2016년 12월 20일
You can't execute the second line because B is not defined before it and you are using it in this line.
I tried your code and got the warning:
Undefined function or variable 'B'.
Do you have a suggestion how to fix it?
Walter Roberson
Walter Roberson 2016년 12월 20일
t1 = cumsum(A);
B = diff([0,t1(A==0),t1(end)]);

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

KSSV
KSSV 2016년 12월 20일
편집: KSSV 2016년 12월 20일
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)
  댓글 수: 1
George Tsintsadze
George Tsintsadze 2016년 12월 20일
Sorry but I asked for solutions without any for/while loops...

댓글을 달려면 로그인하십시오.


José-Luis
José-Luis 2016년 12월 20일
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
George Tsintsadze
George Tsintsadze 2016년 12월 20일
Why did you add the condition
(x - '0') <= 9
in the logical indexing of x?
José-Luis
José-Luis 2016년 12월 20일
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.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by