How do I extract consecutive numbers from a matrix?
조회 수: 5 (최근 30일)
이전 댓글 표시
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]
댓글 수: 0
채택된 답변
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
Cedric
2014년 6월 24일
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.
Carlene Horner
2019년 6월 18일
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개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Tables에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!