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'吗?