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

Dar*_*ick 2 arrays matlab unique

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

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

    ]; 
Run Code Online (Sandbox Code Playgroud)

每行代表四面体的顶点.这些顶点因此没有方向性,在上述情况下,由X(1,:)和X(3,:)表示的四面体是等价的.

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

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

Y = UNIQUE(X);

Y = [
     2
     6
     9
     111
     112
     115
     432
    ]
Run Code Online (Sandbox Code Playgroud)

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

谢谢,S :-)

Mar*_*n B 9

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

X = sort(X, 2);
Run Code Online (Sandbox Code Playgroud)

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

Y = unique(X, 'rows');
Run Code Online (Sandbox Code Playgroud)


Adr*_*ian 5

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

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

Y =

     2   111   112   432
     6     9   111   115
Run Code Online (Sandbox Code Playgroud)

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

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

>> X(yi,:)

ans =

   112   432   111     2
     6     9   115   111
Run Code Online (Sandbox Code Playgroud)