2012-03-14 21 views

Respuesta

9

Lamentablemente, no pude encontrar nada específico sobre el tema. Sin embargo, las funciones anónimas deberían tener una sobrecarga adicional en comparación con las funciones normales.

Puede probarlo usted mismo. En primer lugar crear el archivo nonanon.m

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

A continuación, cree un archivo de célula con:

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

%% anon 
[email protected](x) x^2; 
tic 
for i=1:1000000 
    z=f(i); 
end 
toc 

disfrutan, la salida:

tiempo transcurrido es 0.513759 segundos.

El tiempo transcurrido es 14.434895 segundos.

Lo que concluye que las funciones anónimas son más lentas.

+0

¡Gracias! Me pregunto, ¿por qué es así? – Tim

+1

Funciones de llamada de Matlab por nombre y por identificador de función. Por defecto, las funciones anónimas se llaman a través del segundo mecanismo. Supongo que este último es más lento. Sin embargo, Mathworks no divulga información específica sobre el asunto. –

0

me repitió poco código de prueba user677656 's, pero una pequeña variante usando y=x*x en lugar de elevar al cuadrado (tanto en el nonanon y el caso anon):

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

Si en lugar de utilizar la variante y=x^2, consigo resultados similares como user677656:

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

Esto es con Matlab 2012b. No tengo idea de por qué en la tierra estos dan diferentes resultados.

También he probado y=sin(x) que da resultados similares a los del caso x*x, y y=sqrt(x), que resultó en una ventaja leve (2,8 vs 3,9 segundos) para el caso nonanon.

Cuestiones relacionadas