How do I extract consecutive numbers from a matrix?
4 次查看(过去 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 中查找有关 Polynomials 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!