首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在寻找索引时避免MATLAB中的循环

在寻找索引时避免MATLAB中的循环
EN

Stack Overflow用户
提问于 2018-12-09 14:52:45
回答 1查看 41关注 0票数 1

我在nx3表格中有一个面孔列表" faces“。

每行包含来自nx3顶点列表的3个不同行的3个索引。(因此,每个值都是对一行的索引,其中包含一个顶点的3个坐标。

在以nx1形式表示的向量“索引”中,我存储了我感兴趣的顶点的索引。

现在,我想看看我的“脸表”中,向量“指数”中的这些指数包含在哪里。

目前,我正在循环遍历我的faces列表,以获得"vector“,它具有指向"faces list”行的索引。

为了提高性能,我预先分配了带有零的“向量s”。

有更快的方法来获得同样的结果吗?

代码语言:javascript
复制
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,仍然有困难的矢量化我的代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-09 15:24:08

这里的关键是使用ismember。这为您提供了一个逻辑数组,即在第一个数组的元素与第二个元素(在本例中为facesindices )中的任何元素相等的地方,为1。

作为一个玩具例子,

代码语言:javascript
复制
>> 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值的行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53693523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档