Poesía Binaria

Cronometrar código (matlab)

Matlab® es un lenguaje muy utilizado en ingeniería, ya que permite hacer de forma más o menos sencilla cálculos matemáticos muy complejos, y a veces necesitamos procesar gran cantidad de datos y llega a ser desesperante ver cómo tarda sin tener tan siquiera una ligera idea de cuánto queda.

El principio del código que voy a postear se basa en dos funciones: tic y toc. La primera de ellas marca el inicio de la cuenta de tiempo, y la segunda el final, indicándonos los segundos transcurridos entre tic y toc. Podemos por ejemplo hacer esto:

1
2
3
tic
% Tarea que tarda mucho
toc

Y nos devolverá los segundos en total que ha tardado.

Pero vamos a ir algo más allá. Imaginemos que tenemos una tarea iterativa de N iteraciones, queremos que cada N/20 iteraciones nos diga más o menos lo que queda (en cada iteración sería mucho, porque estaría todo el rato diciendo el tiempo, y además gastando tiempo en ello; por lo que tendríamos que esperar mucho más de lo necesario).

Éste es el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
N=2000;

aviso=100;

tic % Inicia el contador de tiempo
for n=0:N

    % Calculamos el progreso total y los tiempos estimado y restante
    if (mod(n, aviso)==0)
        progreso=n/N;       % Progreso (Entre 0 y 1)
        transcurrido=toc;   % Tiempo transcurrido
        estimado=transcurrido/progreso; % Estimamos el tiempo total
        queda = estimado-transcurrido;  % Tiempo restante
        % Lo mostramos todo en pantalla
        disp(sprintf('Progreso %2.2f%%. Tiempo Transcurrido: %ds. Tiempo estimado: %ds. Tiempo restante %ds.', progreso*100, round(transcurrido), round(estimado), round(queda)));    
    end
   
    % Esto se supone que es una tarea que tarda mucho tiempo
    pause(0.01);
end

disp('Completado!');

También podría interesarte....