【发布时间】:2016-07-01 09:53:16
【问题描述】:
问题
我正在尝试优化我的代码的运行时,并且在此之前提出了一个类似的问题,其中包括几个嵌套的 if 语句。 Vectorizing nested if-statements
由于我在那里发布的希望能实现一些想法的代码有点长,而且我仍在为嵌套循环的矢量化实现而苦苦挣扎,我想用一些更简单的代码再次询问:
代码
NB_list_all=zeros(length(BML),4);
for NB=1:length(BML);
NB_list=zeros(4,1);
%in +x direction
if isempty(find(BML(:,2)==BML(NB,2)+x_blockdimension & BML(:,3)==BML(NB,3), 1));
NB_list(1,1)=0;
else
NB_list(1,1)=find(BML(:,2)==(BML(NB,2)+x_blockdimension)& BML(:,3)==BML(NB,3));
end
NB_list_z(NB,:)=NB_list;
end
% BML(:,2) stores the x-coordinate
% BML(:,3) stores the y-coordinate
一些示例数据
BML=
1 1005 115
2 1100 115
3 1419 120
4 1424 120
5 660 115
6 655 115
注意 BML 的大小为 170 000 x 7。
代码说明
我正在尝试使用此代码在我的点云中找到“x_blockdimension”之外的下一个点。如果什么都找不到,则将条目设置为零。现在,由于这需要大量时间来处理 1800 万个点(而且我不只是在寻找一个方向),因此我正在寻找一种通过使用矢量化或逻辑索引来优化它的方法。如果有其他方法可以改进运行时,我会很乐意提供任何提示。
我尝试了什么
if isempty(find(BML(:,2)==BML(:,2)+x_blockdimension & BML(:,3)==BML(:,3), 1));
NB_list(1,1)=0;
else
NB_list(1,1)=find(BML(:,2)==(BML(:,2)+x_blockdimension)& BML(:,3)==BML(:,3));
end
但它并没有真正做到我想要它做的事情。
希望能帮到你!
【问题讨论】:
标签: performance matlab vectorization