我敢肯定,這裏發生了什麼是你的索引方案是服用少量的時間。不管你選擇什麼方法,雖然有更好的方法,但需要一些時間。邏輯總是比使用find語句更好,但也許更好的是直接使用索引。以下是我用於測試內容的一些示例代碼以及結果。注意,我使用2010版運行,我認爲有一些優化發生在較高的值中,但我不確定那裏發生了什麼......很明顯,直接索引似乎比使用邏輯,並且應該比某種查找語句快得多。
function time_test
time_full_test=zeros(1e3,1);
time_part_test=zeros(1e3,1);
time_direct_indexing_full=zeros(1e3,1);
time_direct_indexing_part=zeros(1e3,1);
data=rand(1e5,1);
for i=1:1e3
time_full_test(i)=complex_stuff(data);
time_part_test(i)=complex_stuff(data,i*100);
time_direct_indexing_full(i)=complex_stuff2(data);
time_direct_indexing_part(i)=complex_stuff2(data,i*100);
end
figure;plot(time_full_test);hold all;plot(time_part_test);plot(time_direct_indexing_full);plot(time_direct_indexing_part)
legend('Full Time Logic','Part Time Logic','Full Time Direct','Part Time Direct')
function time=complex_stuff(input,max_val)
tic
if ~exist('max_val','var')
mask=true(size(input));
else
mask=false(size(input));
mask(1:max_val)=true;
end
sin(input(mask).^2/4356.342).^63/345;
time=toc;
function time=complex_stuff2(input,max_val)
tic
if ~exist('max_val','var')
max_val=length(input);
end
sin(input(1:max_val).^2/4356.342).^63/345;
time=toc;
是您'IDX'由代表在'points.x'位置的整數或者是一個邏輯陣列? – foglerit 2012-02-24 17:27:14
它們位置的整數從'找到(條件)'函數 – zamazalotta 2012-02-24 17:30:09
代替'find',嘗試返回'IDX = points.x == criteria'(或任何其他定義'IDX'邏輯)。這樣你將創建一個邏輯數組,這在很多情況下會導致更快的索引 – foglerit 2012-02-24 17:36:43