Can I arrange a double array into cell array based on discontinuity of values?
조회 수: 1 (최근 30일)
이전 댓글 표시
I have 1x15 double array defined as 'a' and I would like to make them classified into each cell column if the increment of value is broken. This is my code, I have no idea how to make a1 become a2. If the next value is not the prvious number, n+1, then it should break and create new cell column.
axis([0 30 0 30]);
hold on;
a1=[1 2 3 4 5 10 11 12 13 18 19 20 21 22 23];
a2={[1 2 3 4 5] [10 11 12 13] [18 19 20 21 22 23]} ;
cellfun(@(x) plot(x,x), a2);
The length is not fixed, it could be like this
a1=[1 2 3 4 5 6 7 8 9 10 11 12 13 18 19 20 21 22 23];
a2={[1 2 3 4 5 6 7 8 9 10 11 12 13] [18 19 20 21 22 23]} ;
or like this.
a1=[1 2 3 4 11 12 13 18 19 20 21 22 23 30 31 32 33 40 41 42];
a2={[1 2 3 4] [11 12 13] [18 19 20 21 22 23] [30 31 32 33] [40 41 42]};
댓글 수: 0
답변 (1개)
Voss
2023년 12월 14일
a1=[1 2 3 4 5 10 11 12 13 18 19 20 21 22 23];
a2 = split_vector(a1)
a1=[1 2 3 4 5 6 7 8 9 10 11 12 13 18 19 20 21 22 23];
a2 = split_vector(a1)
a1=[1 2 3 4 11 12 13 18 19 20 21 22 23 30 31 32 33 40 41 42];
a2 = split_vector(a1)
function out = split_vector(a)
d = diff(a);
n = diff(find([true, d>min(d), true]));
out = mat2cell(a,1,n);
end
댓글 수: 1
Dyuman Joshi
2023년 12월 14일
Another method -
a1=[1 2 3 4 5 10 11 12 13 18 19 20 21 22 23];
a2 = split_vector(a1)
a1=[1 2 3 4 5 6 7 8 9 10 11 12 13 18 19 20 21 22 23];
a2 = split_vector(a1)
a1=[1 2 3 4 11 12 13 18 19 20 21 22 23 30 31 32 33 40 41 42];
a2 = split_vector(a1)
function out = split_vector(a)
idx = [find(diff(a)~=1) numel(a)];
out = mat2cell(a, 1, [idx(1) diff(idx)]);
end
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!