Чтобы реорганизовать мой код MATLAB, я подумал, что буду передавать функции в качестве аргументов (то, что MATLAB называет анонимными функциями), вдохновленный функциональным программированием.
Однако, похоже, производительность сильно пострадала. В приведенных ниже примерах я сравниваю разные подходы. (Фрагмент кода заключен в функцию, чтобы можно было использовать подфункции)
В результате я получаю 0 секунд для прямого, почти 0 секунд для подфункции и 5 секунд для анонимных функций. Я запускаю MATLAB 7.7 (R2007b) на OS X 10.6 на C2D 1,8 ГГц.
Может ли кто-нибудь запустить код и посмотреть, что получится? Меня особенно интересует производительность в Windows.
function [] = speedtest()
clear all; close all;
function y = foo(x)
y = zeros(1,length(x));
for j=1:N
y(j) = x(j)^2;
end
end
x = linspace(-100,100,100000);
N = length(x);
%% direct
t = cputime;
y = zeros(1,N);
for i=1:N
y(i) = x(i)^2;
end
r1 = cputime - t;
%% using subfunction
t = cputime;
y = foo(x);
r2 = cputime - t;
%% using anon function
fn = @(x) x^2;
t = cputime;
y = zeros(1,N);
for i=1:N
y(i) = fn(x(i));
end
r3 = cputime-t;
[r1 r2 r3]
end
y = x.^2;
возведет в квадрат каждый элементx
и сохранит полученный вектор вy
. - person gnovice   schedule 04.11.2009