Я записал функцию в 4 разных способах, и я хочу, чтобы это время.код времени в matlab
Up к теперь я делал это дело:
tic
%//function 1
toc
tic
%//function 2
toc
tic
%//function 3
toc
tic
%//function 4
toc
Но теперь я хочу, чтобы вычислить данные синхронизации для каждой функции для (скажем, в 100 раз) каждый, а затем вычислить среднее время, затраченное на каждый функция. Как я могу это сделать?
Кроме того, я где-то читал, что напечатанное время - это прошедшее время «настенных часов», поэтому оно будет зависеть от того, что делает мой компьютер, пока работает программа MATLAB.
Так есть лучший способ сделать это ?? Я слышал, что есть MATLAB, встроенный в код-профилировщик с командой «profile on». Можете ли вы предложить мне способ, которым я могу его использовать?
Я также проконсультировался по сайтам: Timing code in MATLAB и Profiler to find code bottlenecks.
Пожалуйста, предложите, как это сделать много раз в цикле. Заранее спасибо.
EDIT: 23 сентября 2013: Соблюдая предложения всеобщего я это сделал: Мои функции определяются как один, два, три & четыре.
function [] = one(x)
I = imread('coins.png');
I = double(I);
I = imresize(I,[x x]);
sig=.8; % scale parameter in Gaussian kernel
G=fspecial('gaussian',15,sig); % Caussian kernel
Img_smooth=conv2(I,G,'same'); % smooth image by Gaussiin convolution
[Ix,Iy]=gradient(Img_smooth);
f=Ix.^2+Iy.^2;
g=1./(1+f); % edge indicator function.
end
function [] = two(x)
I = imread('coins.png');
I = double(I);
I = imresize(I,[x x]);
sig=.8; % scale parameter in Gaussian kernel
G=fspecial('gaussian',15,sig); % Caussian kernel
Img_smooth=imfilter(I,G,'conv'); % smooth image by Gaussiin convolution
[Ix,Iy]=gradient(Img_smooth);
f=Ix.^2+Iy.^2;
g=1./(1+f); % edge indicator function.
end
function [] = three(x)
I = imread('coins.png');
I = double(I);
I = imresize(I,[x x]);
sig=.8; % scale parameter in Gaussian kernel
G=fspecial('gaussian',15,sig); % Caussian kernel
%//Trying to use 1D convolution instead of using 2D convolution
[U,S,V] = svd(G);
K1 = U(:,1) * sqrt(S(1,1));
K2 = V(:,1)' * sqrt(S(1,1));
KI1 = imfilter(I,K1,'conv');
Img_smooth = imfilter(KI1,K2,'conv'); % smooth image by Gaussiin convolution
[Ix,Iy]=gradient(Img_smooth);
f=Ix.^2+Iy.^2;
g=1./(1+f); % edge indicator function.
end
function [] = four(x)
I = imread('coins.png');
I = double(I);
I = imresize(I,[x x]);
sig=.8; % scale parameter in Gaussian kernel
G=fspecial('gaussian',15,sig); % Caussian kernel
%//Trying to use 1D convolution instead of using 2D convolution
[U,S,V] = svd(G);
K1 = U(:,1) * sqrt(S(1,1));
K2 = V(:,1)' * sqrt(S(1,1));
KI1 = imfilter(I,K1,'conv');
Img_smooth=conv2(K1,K2,I,'same'); % smooth image by Gaussiin convolution
[Ix,Iy]=gradient(Img_smooth);
f=Ix.^2+Iy.^2;
g=1./(1+f); % edge indicator function.
end
Затем я запустил эту программу и получил этот раз:
clc;clear all;close all;
x=64;N=100;
tic
for i=1:N
one(x);
end
toc
tic
for i=1:N
two(x);
end
toc
tic
for i=1:N
three(x);
end
toc
tic
for i=1:N
four(x);
end
toc
раз я получил являются:
%//x=64;N=100;
Elapsed time is 0.898583 seconds.
Elapsed time is 0.983132 seconds.
Elapsed time is 0.921140 seconds.
Elapsed time is 0.811144 seconds.
%//x=128;N=100;
Elapsed time is 0.990136 seconds.
Elapsed time is 1.044167 seconds.
Elapsed time is 0.999153 seconds.
Elapsed time is 1.005903 seconds.
%//x=256;N=100
Elapsed time is 1.495068 seconds.
Elapsed time is 1.416523 seconds.
Elapsed time is 1.462653 seconds.
Elapsed time is 1.605767 seconds.
%//x=1024;N=100
Elapsed time is 16.681720 seconds.
Elapsed time is 14.857957 seconds.
Elapsed time is 15.580161 seconds.
Elapsed time is 19.140707 seconds.
Является ли мой код времени не так? Я имею в виду технически, я должен получать самые быстрые времена для функции три & четыре всегда. Для разных значений х я получаю разные результаты.
Пожалуйста, ребята, вы могли бы предложить мне лучший подход к измерению времени? Спасибо заранее!
Если вы обеспокоены (короткими) процессами, мешающими вашим результатам измерений. В целом неплохо смотреть на медиану таймингов, а не на среднее. –