這是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
你能提供的這個代碼做什麼解釋? – Dan
根據比賽是否可能或不太可能,您可能會通過重新排序循環以獲得巨大收益,以便k在外部。然後,對於任何i/j與k的第一次匹配,可以設置removeIndex,然後突破i/j的其餘部分(提前退出)。 – Peter
嗯。在這種情況下,向量'=='很奇怪。你的意思是整行必須在數值上相等嗎?然後用'all(somerow == someotherrow)'明確這個。還要關注與浮點表示相關的四捨五入問題。考慮一些具有閾值的距離度量。 – Peter