通过删除嵌套for循环来优化matlab代码?

时间:2013-05-14 16:32:49

标签: matlab

这是我给出的代码,但运行时间太长。如何通过删除嵌套的for循环来加快速度?

    for iGroup = 1:length(groupIndices)
            curGroupIndex = groupIndices(iGroup);
            curChanIndices = chanIndices{iGroup};
            curChanNames   = chanNames{iGroup};

            groupPropStruct = propsToStruct(propNames{curGroupIndex},propValues{curGroupIndex},REPLACE_STR,PREPEND_STR,ALWAYS_PREPEND);
            groupStruct = struct('name',groupNames(iGroup),'props',groupPropStruct);
            for iChan = 1:length(curChanIndices)
                curChanIndex = curChanIndices(iChan);
                chanPropStruct = propsToStruct(propNames{curChanIndex},propValues{curChanIndex},REPLACE_STR,PREPEND_STR,ALWAYS_PREPEND);
                chanStruct =  struct('name',curChanNames{iChan},'props',chanPropStruct,...
                    'data',[]);
                chanStruct.data = data{curChanIndex};
                groupStruct.(TDMS_genvarname2(chanStruct.name,...
                    REPLACE_STR,PREPEND_STR,ALWAYS_PREPEND)) = chanStruct;
            end
            output.(TDMS_genvarname2(groupStruct.name,...
                REPLACE_STR,PREPEND_STR,ALWAYS_PREPEND)) = groupStruct;
        end

1 个答案:

答案 0 :(得分:1)

正如有人所说,如果不知道你的代码实际在做什么,很难说。 也许你可以给出一个关于代码的玩具示例?这会有所帮助。

无论如何,在编写MATLAB for-loops时需要考虑以下四个要点:

1:当然,使用内置MATLAB功能而不是for-loops。它们用c / Fortran编写,在SIMD,多线程等方面要快得多。

2:你的for循环是连续的,看起来可切片。考虑使用parfor循环,在循环中使用多处理器功能。

3:你的for循环是否在matlab函数中?如果不是这样做的话,那么MATLAB的yit编译器可以将你的循环编译成字节代码,这要快得多!

4:如果您熟悉C ++,请编写一个mex函数。在这里,您可以充分发挥机器的潜力。