Я почти уверен, что здесь происходит, потому что ваша схема индексации занимает немного времени. Независимо от того, какой метод вы выберете, это займет некоторое время, хотя есть и лучшие методы. Логика всегда лучше, чем использование оператора 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;
![enter image description here](https://i.stack.imgur.com/jZyMP.png)