Para refactorizar mi código MATLAB, pensé en pasar las funciones como argumentos (lo que MATLAB llama funciones anónimas), inspiradas en la programación funcional.Rendimiento bajo usando funciones anónimas en MATLAB ... ¿otros han notado esto?
Sin embargo, parece que el rendimiento se ve afectado severamente. En los ejemplos a continuación, comparo diferentes enfoques. (El fragmento de código está envuelto en una función para poder usar las subfunciones)
El resultado que obtengo es 0 segundos para directo, casi 0 segundos usando una subfunción, y 5 segundos usando funciones anónimas. Estoy ejecutando MATLAB 7.7 (R2007b) en OS X 10.6, en C2D 1.8 GHz.
¿Alguien puede ejecutar el código y ver qué obtienen? Estoy especialmente interesado en el rendimiento en 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
Cuál es su pregunta exactamente ?? – Amro
Me pregunto por qué estás haciendo cálculos tan complicados de todos modos ... puedes reemplazar la necesidad de un ciclo for mediante el uso de operaciones vectoriales. Por ejemplo, 'y = x.^2;' cuadrará cada elemento de 'x' y guardará el vector resultante en' y'. – gnovice
FYI: pregunta similar sobre el rendimiento del despacho del método OOP: http://stackoverflow.com/questions/1693429/matlab-oop-is-it-slow-or-am-i-doing-something-wrong/1745686#1745686 –