MATLAB删除第二次/第三次出现重复索引的行

MATLAB删除第二次/第三次出现重复索引的行,matlab,matrix,unique,Matlab,Matrix,Unique,我有一个两列的大矩阵。第一个是索引,第二个是数据。有些指标是重复的。如何仅保留具有重复索引的行的第一个实例 例如: x = 1 5.5 1 4.5 2 4 3 2.5 3 3 4 1.5 以以下方式结束: ans = 1 5.5 2 4 3 2.5 4 1.5 我已经尝试了不同的变体和迭代 [Uy, iy, yu] = unique(x(:,1)); [q, t] =

我有一个两列的大矩阵。第一个是索引,第二个是数据。有些指标是重复的。如何仅保留具有重复索引的行的第一个实例

例如:

x = 
    1   5.5
    1   4.5
    2   4
    3   2.5
    3   3
    4   1.5
以以下方式结束:

ans = 
    1   5.5
    2   4
    3   2.5
    4   1.5
我已经尝试了不同的变体和迭代

[Uy, iy, yu] = unique(x(:,1));
[q, t] = meshgrid(1:size(x, 2), yu);
totals = accumarray([t(:), q(:)], x(:));

但是到目前为止,没有任何东西能提供我所需要的输出。

unique
函数中使用
'first'
标记,然后第二个输出为您提供所需的行索引,您可以使用它来“过滤”矩阵

[~, ind] = unique(x(:,1), 'first');
ans = x(ind, :)

ans =

    1.0000    5.5000
    2.0000    4.0000
    3.0000    2.5000
    4.0000    1.5000
编辑

或者正如Jonas指出的(尤其是旧的Matlab版本)


unique
函数中使用
'first'
标记,然后第二个输出为您提供所需的行索引,您可以使用这些行索引“过滤”矩阵

[~, ind] = unique(x(:,1), 'first');
ans = x(ind, :)

ans =

    1.0000    5.5000
    2.0000    4.0000
    3.0000    2.5000
    4.0000    1.5000
编辑

或者正如Jonas指出的(尤其是旧的Matlab版本)


此行为仅在较新版本中受支持。对于
unique
将返回最后一个元素的索引的发行版,请首先在
x
上调用
flipud
。@Jonas R2008a已经支持它,不确定是否可以将其称为“最近”。感谢@Jonas,为旧版Matlab用户添加了
flipud
方法成功!仍在处理唯一输出中的索引向量。我最终会到达那里的!非常感谢大家。然后是否可以提取具有多个索引的第二次/第三次出现的数据?我知道,
'last'
会对最后一次事件执行相同的操作,但是我可以指定'second'或'third'吗?这种行为仅在较新的版本中受支持。对于
unique
将返回最后一个元素的索引的发行版,请首先在
x
上调用
flipud
。@Jonas R2008a已经支持它,不确定是否可以将其称为“最近”。感谢@Jonas,为旧版Matlab用户添加了
flipud
方法成功!仍在处理唯一输出中的索引向量。我最终会到达那里的!非常感谢大家。然后是否可以提取具有多个索引的第二次/第三次出现的数据?我知道,
'last'
会对最后一次事件执行相同的操作,但是我可以指定'second'或'third'吗?