保留多列相同时找到的第一个唯一行

时间:2017-05-01 14:40:19

标签: matlab unique octave

我有一个按第一列排序的数组,但我只想保留第二列和第三列相同时找到的第一个唯一行。

我知道我可以使用unique(array1(:,2), "first")unique(array1(:,3), "first")第一次出现。但我想保留第一个独特的行 当第二列和第三列相同时

示例 array1:

1   140.58939   226.65578
2   143.23078   227.31933
3   143.23078   227.31933
4   143.23078   227.83631
5   143.23078   229.79236
6   146.822     231.705
7   146.822     231.705
8   89.083      123.43
9   146.822     231.705
10  167.23      231.705

我想让阵列看起来像 new_array1:

1   140.58939   226.65578
2   143.23078   227.31933
4   143.23078   227.83631
5   143.23078   229.79236
6   146.822     231.705
8   89.083      123.43
10  167.23      231.705

Ps:我使用的是Octave 4.0,类似于Matlab。

2 个答案:

答案 0 :(得分:2)

以下是使用uniquesort在Octave 4.0中执行此操作的方法:

[~, index] = unique(array1(:, 2:3), "rows", "first");
new_array1 = array1(sort(index), :);

new_array1 =

     1.0000   140.5894   226.6558
     2.0000   143.2308   227.3193
     4.0000   143.2308   227.8363
     5.0000   143.2308   229.7924
     6.0000   146.8220   231.7050
     8.0000    89.0830   123.4300
    10.0000   167.2300   231.7050

答案 1 :(得分:0)

怎么样:

[C,IA,~]=unique(array1(:,2:3),'rows');
array1_unique = array1(sort(IA),:)

结果:

array1_unique  =

1.0000  140.5894  226.6558
2.0000  143.2308  227.3193
4.0000  143.2308  227.8363
5.0000  143.2308  229.7924
6.0000  146.8220  231.7050
8.0000   89.0830  123.4300
10.0000  167.2300  231.7050

唯一C的直接返回是一个排序数组。因此,您还希望拥有索引向量。

  

[C,IA,IC] = UNIQUE(A,'rows')也返回索引向量IA和IC,使得C = A(IA,:)和A = C(IC,:)。

请注意,这是在Matlab中完成的。