这是我给出的代码,但运行时间太长。如何通过删除嵌套的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
答案 0 :(得分:1)
正如有人所说,如果不知道你的代码实际在做什么,很难说。 也许你可以给出一个关于代码的玩具示例?这会有所帮助。
无论如何,在编写MATLAB for-loops时需要考虑以下四个要点:
1:当然,使用内置MATLAB功能而不是for-loops。它们用c / Fortran编写,在SIMD,多线程等方面要快得多。
2:你的for循环是连续的,看起来可切片。考虑使用parfor循环,在循环中使用多处理器功能。
3:你的for循环是否在matlab函数中?如果不是这样做的话,那么MATLAB的yit编译器可以将你的循环编译成字节代码,这要快得多!
4:如果您熟悉C ++,请编写一个mex函数。在这里,您可以充分发挥机器的潜力。