我有这种数据
A = [1 0.5
1 0.1
1 0.3
2 1
2 0.5
2 0.1
2 1
5 2 ]
看第一列,可以有重复的数字,而这些数字只出现一次。从重复数字开头的行中,我想选择最后一次出现的行以及其余行。对于上面的示例,我的输出将变为:
Output = [1 0.3
2 1 ]
我该怎么做?
答案 0 :(得分:1)
我要假设一些事情:
[2;2;2;3;2]
之类的条目,则最后一行将不被视为“ {{ 1}}组”)。如果要考虑分离的行/组,请确保在应用此算法之前先2
中的sort the rows。这是我的建议:
A
其工作方式的解释:
out = A( [false; diff([logical(diff(A(:,1),1)); true])>0], :);
,因此,如果最后一行是组的一部分,则将其考虑在内。true
。我们仅保留“正”过渡,因为只有这样才能在第一列中表示一个新数字。2->5
连接到开头,因为从未选择第一行。答案 1 :(得分:1)
使用unique
函数,您可以轻松解决问题:
%%% Find the first indices of the unique numbers in column 1
[~, i_first, ~] = unique(A(:,1),'first');
%%% Then, find the last indices of the unique numbers in column 1
[~, i_last, ~] = unique(A(:,1),'last');
%%% Lastly, remove the entries with the same starting and finishing index
%%% from the last indices vector
i_last(i_last == i_first) = [];
%%% Output the requested values
Output = A(i_last, :);
此解决方案假定以下内容:(由Dev-iL提供)
1.第一列必须包含整数(否则这将需要uniquetol)
2.将不连续的组视为连续的组(即,它隐式执行排序)