表格Matlab的每一行上的迭代动作都很慢

时间:2016-02-18 21:47:05

标签: matlab

我在MATLAB中有一个名为AllBanks的变量类型表。我想让代码更快。我已经运行了一个循环来添加新的变量。代码如下,但速度很慢。

 for i2=1:size(AllBanks,1)

        AllBanks.SheetNameTrimmed(i2)= strrep(AllBanks.SheetName(i2),char(32),'');
        AllBanks.EngName(i2)={strcat(AllBanks.SheetName{i2} ,sprintf('%02d',AllBanks.RowNumber(i2)))};
        AllBanks.EngNameTrimmed(i2)={strcat(AllBanks.SheetNameTrimmed{i2} ,sprintf('%02d',AllBanks.RowNumber(i2)))};

    end

它有一个名为SheetName的列,它的类型为char,也是一个名为Rownumber的数字列。 表格样本如下所示:

enter image description here

1 个答案:

答案 0 :(得分:2)

使用你的样本,我在MATLAB中编写了一个表:

tic;
% first make the 'SheetNameTrimmed' column. Notice how you can do it
% outside the for loop
AllBanks.SheetNameTrimmed= strrep(AllBanks.SheetName,char(32),'');

% Next, generate a new cell array from RowNumber
tmp1 = cellstr(num2str(AllBanks.RowNumber,'%02d'));

% Concatenate SheetName and SheetNameTrimmed with tmp1.
EngName = strcat(AllBanks.SheetName,tmp1);
EngNameTrimmed = strcat(AllBanks.SheetNameTrimmed,tmp1);    

% Now simply declare two new columns from the new cell arrays
AllBanks.EngName = EngName;
AllBanks.EngNameTrimmed = EngNameTrimmed;
toc

使用此表格,您的原始代码需要0.007432秒。让我们尝试另一种选择:

var score : Int = ...
var totalquestionsasked : Int = ...
let percentagecorrect = (score * 200 + totalquestionsasked)/(2 * totalquestionsasked)

此代码需要0.003829秒,大约是原始代码的一半。

为了将来参考,对代码进行矢量化通常会提高速度。根据经验,如果可以,请避免循环。