I have a matrix like: A=[1 2 5 6 7 8 9 20 21 22 23…] I'd like to separate consecutive number, like: C=[1 2] D=[5 6 7 8 9], E=[ 20 21 22 23]

 채택된 답변

Cedric
Cedric 2014년 6월 24일
편집: Cedric 2014년 6월 24일
Here is a solution, but there are many ways to do it, some simpler than others:
grouped = mat2cell( A, 1, diff( [0, find(diff(A) ~= 1), length(A)] )) ;
where grouped is a cell array with the following content
>> grouped{1}
ans =
1 2
>> grouped{2}
ans =
5 6 7 8 9
>> grouped{3}
ans =
20 21 22 23
Edit : here is a funny way for Star Strider, who wanted a tutorial about ACCUMARRAY ;-)
grouped = accumarray( cumsum([1, diff(A) ~= 1]).', A, [], @(x){x} ) ;

댓글 수: 3

Noted and appreciated!
Thanks! +1
I was actually unaware that ACCUMARRAY could output cell arrays until I learned that from one of Andrei's solutions that blew my mind away.
I keep getting a horzcat error. I'm assuming this is because when finding the difference of a vector, the length of that difference vector is one less of the original vector. How do you fix this? Thanks!

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

추가 답변 (0개)

카테고리

도움말 센터 및 File Exchange에서 Polynomials에 대해 자세히 알아보기

질문:

2014년 6월 24일

댓글:

2019년 6월 18일

Community Treasure Hunt

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

Start Hunting!

Translated by