我有一个包含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: - )
答案 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建议