Будет ли разница в производительности между анонимными и обычными функциями? - PullRequest
5 голосов
/ 15 марта 2012

Будет ли разница в производительности между анонимными и обычными функциями?Например, есть ли какие-либо изменения в накладных расходах на вызов функции?

Спасибо и всего наилучшего!

Ответы [ 2 ]

9 голосов
/ 15 марта 2012

К сожалению, я не смог найти ничего конкретного по этому вопросу.Однако анонимные функции должны иметь дополнительные издержки по сравнению с обычными функциями.

Вы можете попробовать это сами.Сначала создайте файл nonanon.m

function x=nonanon(y)
  x=y^2;
end

Затем создайте файл ячейки с:

%% non anon
tic
for i=1:1000000
    z=nonanon(i);
end
toc

%% anon
f=@(x) x^2;
tic
for i=1:1000000
    z=f(i);
end
toc

наслаждайтесь, вывод:

Истекшее время 0,513759секунд.

Истекшее время составляет 14,434895 секунд.

Что означает, что анонимные функции работают медленнее.

0 голосов
/ 07 ноября 2012

Я повторил небольшой тестовый код user677656, но небольшой вариант с использованием y=x*x вместо возведения в квадрат (в случае nonanon и anon):

Elapsed time is 0.517514 seconds.
Elapsed time is 0.223450 seconds.

Если я вместо этого использую вариант y=x^2, я получу результаты, аналогичные user677656:

Elapsed time is 0.402366 seconds.
Elapsed time is 7.440174 seconds.

Это с Matlab 2012b. Я понятия не имею, почему на земле они дают разные результаты.

Я также протестировал y=sin(x), который дает результаты, аналогичные случаю x*x, и y=sqrt(x), что дало небольшое (2,8 против 3,9 секунды) преимущество для случая nonanon.

...