【发布时间】:2012-10-12 08:24:29
【问题描述】:
这是 Profiler 报告的一部分,显示了这些行如何占用时间。可以改进吗?
434 %clean up empty cells in subPoly
228 435 if ~isempty(subPoly)
169 436 subPoly(cellfun(@isempty,subPoly)) = [];
437
438 %remove determined subpoly points from the hull polygon
169 439 removeIndex = zeros(size(extendedPoly,1),1);
169 440 for i=1:length(subPoly)
376 441 for j=1:size(subPoly{i}(:,1))
20515 442 for k=1:size(extendedPoly,1)
6.12 5644644 443 if extendedPoly(k,:)==subPoly{i}(j,:)
30647 444 removeIndex(k,1)=1;
30647 445 end
1.08 5644644 446 end
0.02 20515 447 end
376 448 end
169 449 extendedPoly = extendedPoly(~removeIndex(:,1),:);
169 450 end
【问题讨论】:
-
你能解释一下这段代码的作用吗?
-
根据是否可能匹配,您可能会通过重新排序循环以使 k 在外部获得很大的收益。然后,对于任何 i/j 与 k 的第一次匹配,您可以设置 removeIndex,然后突破 i/j 的其余部分(提前退出)。
-
嗯。矢量
==在这种情况下很奇怪。你的意思是整行必须在数字上相等吗?然后使用all(somerow == someotherrow)明确说明。还要注意与浮点表示相关的舍入问题。考虑一些带有阈值的距离度量。
标签: performance matlab time for-loop