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 :-)
首先,对矩阵的行进行排序,以得到四面体的"规范"表示:
X = sort(X, 2);
Run Code Online (Sandbox Code Playgroud)
然后,使用unique
可选'rows'
参数来查找唯一行:
Y = unique(X, 'rows');
Run Code Online (Sandbox Code Playgroud)
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)