Arrays 如何在矩阵中找到唯一的行,而每行中没有元素顺序?
我有一个由n行和4列组成的数组。行上的四个条目都是整数,即Arrays 如何在矩阵中找到唯一的行,而每行中没有元素顺序?,arrays,matlab,unique,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 = U
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:-)引用文档: b=unique(A,‘行’)返回 A的唯一行
这就是你想要的吗?首先,对矩阵的行进行排序,以得到四面体的“规范”表示:
X = sort(X, 2);
然后,将unique
与可选的'rows'
参数一起使用,以查找唯一的行:
Y = unique(X, 'rows');
您应该首先对行进行排序,然后使用unique(A,'rows'),正如HPM所建议的那样,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