Per rifattare il mio codice MATLAB, ho pensato di passare le funzioni come argomenti (quello che MATLAB chiama funzioni anonime), ispirato dalla programmazione funzionale.Rallentamento delle prestazioni utilizzando le funzioni anonime in MATLAB ... altri lo hanno notato?
Tuttavia, sembra che le prestazioni siano colpite in modo piuttosto grave. Negli esempi di seguito, confronto diversi approcci. (Il frammento di codice è avvolto in una funzione per essere in grado di utilizzare sottofunzioni)
Il risultato che ottiene è 0 secondi per diretti, quasi 0 secondi utilizzando una sottofunzione, e 5 secondi con funzioni anonime. Sto usando MATLAB 7.7 (R2007b) su OS X 10.6, su un C2D 1.8 GHz.
Qualcuno può eseguire il codice e vedere cosa ottengono? Sono particolarmente interessato alle prestazioni su 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
Qual è la tua domanda esattamente ?? – Amro
Mi chiedo perché stai facendo calcoli troppo complicati comunque ... puoi sostituire la necessità di un ciclo for usando le operazioni vettoriali. Ad esempio, 'y = x.^2;' quadrerà ogni elemento di 'x' e salverà il vettore risultante in' y'. – gnovice
FYI: domanda simile sulle prestazioni di invio del metodo OOP: http://stackoverflow.com/questions/1693429/matlab-oop-is-it-slow-or-am-i-doing-something-wrong/1745686#1745686 –