Matlab 运行时间(使用循环和不使用循环)

Matlab 运行时间(使用循环和不使用循环),matlab,Matlab,我想显示两个函数的运行时间。下面你可以看到两个函数 function example( origimg,t,bwimg ) imOriginal=imread(origimg); tic imOriginal=rgb2gray(imOriginal); for i=1:size(imOriginal,1) for j=1:size(imOriginal,2) for k=1:size(imOriginal,3)

我想显示两个函数的运行时间。下面你可以看到两个函数

function example( origimg,t,bwimg )

    imOriginal=imread(origimg);
    tic
    imOriginal=rgb2gray(imOriginal);
    for i=1:size(imOriginal,1)
        for j=1:size(imOriginal,2)
          for k=1:size(imOriginal,3)
              if imOriginal(i,j,k)>t
              imOriginal(i,j,k)=0;
              end
          end
        end
    end  
    figure,imshow(imOriginal);
    toc
    imwrite(imOriginal,bwimg);
end
还有另一个功能

function example2( origimg,t,bwimg )

    imOriginal=imread(origimg);
    tic
    imOriginal=rgb2gray(imOriginal);
    i = imOriginal>t;
    imOriginal(i)=0;
    figure,imshow(imOriginal);
    toc
    imwrite(imOriginal,bwimg);

end
所以当我比较函数的运行时间时,我遇到了一个奇怪的结果


示例2的运行时间高于示例1。我的错在哪里?

找出所有您不想测量的常见代码:

function img = example(img,t)
  for i=1:size(img,1)
    for j=1:size(img,2)
      for k=1:size(img,3)
        if img(i,j,k)>t
          img(i,j,k)=0;  
        end
      end
    end
  end
end

function img = example2(img,t)
  i = img>t;
  img(i)=0;
end

function measure(origimg, t, bwimg, func)
  imOriginal=imread(origimg);
  imOriginal=rgb2gray(imOriginal);
  tic
  imModified = func(imOriginal, t);
  toc
  figure,imshow(imModified);
  imwrite(imModified,bwimg);    
end
然后,您可以比较两种方法,例如:

measure('inputimg.png', 0.5, 'bwimg.png', @example);    
measure('inputimg.png', 0.5, 'bwimg.png', @example2);
如果您仍然没有得到显著的差异,您应该使用更大的图像,或者在for循环中重复您正在评测的代码(在tic/toc中)N次(例如1000次)


我家里没有Matlab,所以没有试过任何代码。

试一下imOriginal((imOriginal>t))=0;数组的大小是多少?计时的值是多少?因为如果你只看到几微秒的运行时间,你的图像根本不足以在这两种方法之间进行公平的比较。。。