Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提高Matlab的效率:大数据的多循环_Matlab_Loops_Time_Vectorization_Large Data - Fatal编程技术网

提高Matlab的效率:大数据的多循环

提高Matlab的效率:大数据的多循环,matlab,loops,time,vectorization,large-data,Matlab,Loops,Time,Vectorization,Large Data,我有以下程序 for x = 1:60 for y = 1:160 % load a 2D 'Image' from a 3d matrix for a = 0:52 for b = 0:52 imageWin = Image((a*8+1):(a*8+96), (b*8+1):(b*8+96)); for d = 1:5

我有以下程序

for x = 1:60
    for y = 1:160
        % load a 2D 'Image' from a 3d matrix
            for a = 0:52
                for b = 0:52
                    imageWin = Image((a*8+1):(a*8+96), (b*8+1):(b*8+96));    

                    for d = 1:5
                        [glcm(:,:,d),im] = graycomatrix(imageWin,'NumLevels',256,'G',[],'Symmetric', true,'Offset',d);
                    end

                    % Calculation which produce 'results' and takes 0.16 seconds
                end
              end
              finalResult(:,:,y) = result;
     end
     save(strcat('finalResult', num2str(x),'.mat'), 'finalResult');
end
我的3d矩阵是512x512x160x60。因此,一个“图像”将有280996x96个窗口

如您所见,一个“y”需要7.5分钟,因此完成所有160个需要19个小时,而所有2809x160x60需要更多时间


到目前为止,我已经做了很多改进,不知道还有什么可以做得更好。任何想法都将受到高度赞赏。

使用
blockproc
替换
a
b
的for循环。在
blockproc
中,将函数句柄指向函数
graycomatrix
(与函数的5个循环一起,因此将d的fop循环与函数一起包装到另一个函数中,并将句柄指向该函数)。对
x
的循环使用
parfor
,但您必须考虑这一点,因为您无法在
parfor
循环中保存。在
blockproc
中,使
UseParallel
为真。另外,预先分配
glcm
finalResult
。使用分析器的详细输出将有助于您从其他人那里获得答案。您是否可以将大小缩小到一些最小数字,并相应地编辑代码?这样做可能更容易测试。另外,当我使用一些随机值运行时,它抛出了这个错误-
偏移量必须是一个N×2数组。
。您是否“运行并计时”了它?MATLAB有默认图像,例如
cameraman.tif
peppers.png
。编写一个代码,将这些图像中的一个放入三维数组,并执行任何操作。这样,它将是一个独立的代码。如果您完全确定无法改进功能
graycomatrix
,请将其替换为
pause(0.16)
或您认为合适的任何时间段。