我在nx3表格中有一个面孔列表" faces“。
每行包含来自nx3顶点列表的3个不同行的3个索引。(因此,每个值都是对一行的索引,其中包含一个顶点的3个坐标。
在以nx1形式表示的向量“索引”中,我存储了我感兴趣的顶点的索引。
现在,我想看看我的“脸表”中,向量“指数”中的这些指数包含在哪里。
目前,我正在循环遍历我的faces列表,以获得"vector“,它具有指向"faces list”行的索引。
为了提高性能,我预先分配了带有零的“向量s”。
有更快的方法来获得同样的结果吗?
s = zeros(9000000,1);
aa = 0;
for a = 1:size(indices,1)
[i,j] = find (faces == indices(a));
s(aa+1:aa + size(i,1),1) = i;
aa = aa + size(i,1);
end
ss = s(any(s,2),:);
faces = faces(ss(:,1),:);谢谢你的帮助。不幸的是,我没有那么熟练的MATLAB,仍然有困难的矢量化我的代码。
发布于 2018-12-09 15:24:08
这里的关键是使用ismember。这为您提供了一个逻辑数组,即在第一个数组的元素与第二个元素(在本例中为faces和indices )中的任何元素相等的地方,为1。
作为一个玩具例子,
>> faces = randi(10, 10, 3)
faces =
5 3 9
8 4 4
10 7 10
6 6 3
8 10 1
9 2 2
4 7 9
5 8 3
7 8 4
2 4 9
>> indices = [1, 2, 3].'
indices =
1
2
3
>> s = ismember(faces, indices)
s =
0 1 0
0 0 0
0 0 0
0 0 1
0 0 1
0 1 1
0 0 0
0 0 1
0 0 0
1 0 0在那里,您可以像以前一样继续查找其中包含任何1值的行。
https://stackoverflow.com/questions/53693523
复制相似问题