如何减少此代码的计算时间?

时间:2017-01-31 17:45:29

标签: matlab performance time cell

我正致力于计算图像数据集的某些功能并保存这些功能供以后使用。以下是代码:

tic
l = 9907 % size of image data set
% pre-allocating space for variables in the for loop
Icolor = cell(1,l);
Iwave = cell(1,l);
IglrlFeatures = cell(1,l);
for i = 1:l % l = size of image data set = 9907
    IDB{1,i} = imread(strcat(path,strcat(num2str(i),'.jpg')));
    Icolor{1,i} = colorMoments(IDB{1,i}); % 6-features in each cell
    Iwave{1,i} = waveletTransform(IDB{1,i}); % 8-features in each cell
    IglrlFeatures{1,i}  = textureFeatures(IDB{1,i}); % 44-features in each cell
    ICW{1,i} = [Icolor{1,i} Iwave{1,i} IglrlFeatures{1,i}];
end
toc

此处单个图像上每个功能的计算时间为:

colorMoments(single_image)=经过的时间是0.009689秒。

waveletTransform(single_image)=经过的时间是0.018069秒。

textureFeatures(single_image)=经过的时间是0.022902秒。

l =数据集大小= 9907张图片

不同数据集大小的计算时间(l):

l = 10;经过的时间是0.402629秒。

l = 100;经过的时间是2.233971秒。

l = 1000;经过的时间是21.178395秒。

l = 2000;经过的时间是44.510071秒。

l = 5000;经过的时间是111.393866秒。

l = 9907;经过的时间是238.924998秒。约(约4分钟)

我想减少这个计算时间,有什么建议吗?

谢谢,

戈皮

1 个答案:

答案 0 :(得分:0)

测量的时间似乎表示O(n)阶的计算复杂度。我怀疑这种类型的问题可以进一步减少订单。因此,我认为,充其量只能希望性能线性增长。

您应该关注的一件事是代码是否使用多个处理器核心。如果没有,请尝试重新构建for - 循环,以便能够使用parfor