0

我有一个有两列的大矩阵。首先是索引,其次是数据。一些索引是重复的。如何仅保留具有重复索引的行的第一个实例?

例如:

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(:));

但到目前为止,没有什么能给我我需要的输出。

4

1 回答 1

4

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

[~, 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

编辑

或者正如乔纳斯指出的那样(尤其是旧的 Matlab 版本)

[~, ind] = unique(flipud(x(:,1)));
ans = x(flipud(ind), :)
于 2013-04-24T14:34:16.070 回答