Matlab 如何区分重复的数字

Matlab 如何区分重复的数字,matlab,matrix,filtering,subset,rows,Matlab,Matrix,Filtering,Subset,Rows,我有这样的数据 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 ] 我怎样才能做到这一点呢?我将假设两件事: 第一列不必排序

我有这样的数据

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  ]

我怎样才能做到这一点呢?

我将假设两件事:

第一列不必排序,但只考虑连续组,即如果第一列包含[2;2;2;3;2]之类的条目,则最后一行将不被视为2组的一部分。如果要考虑分离的行/组,请确保在应用此算法之前使用。 第一列仅包含整数。 以下是我的建议:

out = A( [false; diff([logical(diff(A(:,1),1)); true])>0], :);
对其工作方式的说明:

我们区分第一列以检测值转换。 在上一个结果的末尾,我们连接了一个true,这样,如果最后一行是组的一部分,就可以考虑它。 然后我们再次区分这一点,以便检测连续的转换,如示例中的2->5。我们只保留正转换,因为只有这表示第一列中有一个新数字。 最后,我们将false连接到开头,因为第一行从未被选中。 使用该功能,您可以轻松解决您的问题:

 %%% 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, :);
此解决方案包括以下内容:由 1.第一列必须包含整数,否则这将需要uniquetol
2.非连续组被视为连续组,即它隐式地执行排序

“最后”是指“第一”?那么是0.5还是0.3?这个例子不符合描述-请确保它们是一致的。那么第一列中的5呢?对不起。我已经编辑了输出。谢谢这是一个很好的方法,尽管您可能希望列出解决方案的假设和特性:1第一列必须包含整数,否则这将需要uniquetol;2个非连续组被视为连续组,即隐式执行排序。确定:不要忘了,在需要时,您可以编辑您的帖子。