如何在矩阵中找到唯一的行,每行中没有元素顺序?

时间:2010-07-15 10:45:22

标签: arrays matlab unique

我有一个包含n行和4列的数组。该行上的四个条目中的每一个都是整数,即

X = [
       111 112 432   2
         6   9 115 111
       112 432 111   2

    ]; 

每行代表四面体的顶点。这些顶点没有方向性,因此,在上面的例子中,由X(1,:)和X(3,:)表示的四面体是等价的。

我希望从X中删除重复的四面体,但是不能完全理解如何将顺序独立性合并到我的代码中。

我尝试了UNIQUE()函数,但这会返回一个唯一整数的(nx1)数组,即

Y = UNIQUE(X);

Y = [
     2
     6
     9
     111
     112
     115
     432
    ]

有人建议以合理有效的方式完成此任务吗?

谢谢, S: - )

4 个答案:

答案 0 :(得分:9)

首先,对矩阵的行进行排序,以得到四面体的“规范”表示:

X = sort(X, 2);

然后,使用unique和可选的'rows'参数来查找唯一的行:

Y = unique(X, 'rows');

答案 1 :(得分:5)

unique()将对行有效,但第1行和第3行的顺序不同。所以我们可以在使用unique之前对它们进行排序。

Y=unique(sort(X,2),'rows')

Y =

     2   111   112   432
     6     9   111   115

如果要保留原始排序,则unique将返回索引

[Y,yi]=unique(sort(X,2),'rows');

>> X(yi,:)

ans =

   112   432   111     2
     6     9   115   111

答案 2 :(得分:3)

引用文档:

  

b = unique(A,'rows')返回   唯一的A行。

这就是你想要的吗?

答案 3 :(得分:1)

您应首先对行进行排序,然后使用唯一(A,'行')作为HPM建议