在MATLAB中使用parfor作为以下代码时如何避免单元格

时间:2017-02-02 18:13:54

标签: matlab performance

我有这个代码,我想使用parfor而不是常规for循环来改善计算时间。当我试图运行代码时,它给出了错误

请建议一个等效的代码,允许我使用parfor作为以下代码

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

谢谢,

戈皮

1 个答案:

答案 0 :(得分:0)

在循环之前预分配单元阵列大小

IDB = cell(1,l)
Icolor = ...
...

使用()代替{}将每个单元格作为单个内存项目进行访问。我还将第一个索引从常量1更改为文字:。我不确定是哪一个导致了您的错误,但通常情况下,当parfor没有针对多维结构执行时,因为您的"切片"结构不与parfor切片表示对齐。通常其中一个会使您的表示形式可以访问。

for i = 1:l
  IDB(:,i) = imread(...)
  Icolor(:,i) = colorMoments(IDB(:,i)); 
  ...
end