1

这是我得到的代码,但是运行时间太长。如何通过删除嵌套的 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
4

1 回答 1

1

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

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

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

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

3:您的 for 循环是否封装在 matlab 函数中?如果不是,那就去做吧!这样来自 MATLAB 的 yit 编译器可以将你的循环编译成字节码,这要快得多!

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

于 2013-05-14T19:29:53.157 回答