我相当确定(在 MATLAB 中)应该有一个优雅的解决方案,但我现在想不起来。
我有一个包含 [classIndex, start, end] 的列表,我想将连续的类索引折叠成一个组,如下所示:
这个
1 1 40
2 46 53
2 55 55
2 57 64
2 67 67
3 68 91
1 94 107
应该变成这样
1 1 40
2 46 67
3 68 91
1 94 107
我该怎么做?
编辑
没关系,我想我明白了 - 它几乎像 fmarc's solution , 但得到正确的索引
a=[ 1 1 40
2 46 53
2 55 55
2 57 64
2 67 67
3 68 91
1 94 107];
d = diff(a(:,1));
startIdx = logical([1;d]);
endIdx = logical([d;1]);
b = [a(startIdx,1),a(startIdx,2),a(endIdx,3)];
最佳答案
这是一种解决方案:
Ad = find([1; diff(A(:,1))]~=0);
output = A(Ad,:);
output(:,3) = A([Ad(2:end)-1; Ad(end)],3);
clear Ad
关于matlab - 整理 list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2455050/