指定应在Matlab中执行的行

时间:2014-08-12 14:24:40

标签: performance matlab optimization

我在.m文件中有大约400行代码。这个文件执行了很多次,所以它是程序中最大的时间消费者。有时当我执行程序时,我只需要运行400行中的大约50行(50行中的哪一行将在执行开始时确定)。我希望能够指定应该运行哪些行(或者在应该丢弃的行上自动获得等效的“%-comment”),而不使用任何带来时间开销的if语句或类似语句。是否有可能实现这一目标?

3 个答案:

答案 0 :(得分:1)

这是你要找的吗?

s = (1+1==2);

fin = fopen('foo.m','r');
fout = fopen('foo_edit.m','w+');
if s
    while (~feof(fin))
        tline = fgetl(fin);
        if (~isempty(regexp(tline, '^[^(% )].*\% conditional$', 'once')))
            fprintf(fout, '%% %s\n', tline);
        else
            fprintf(fout, '%s\n', tline);
        end
    end
else
    while (~feof(fin))
        tline = fgetl(fin);
        if (~isempty(regexp(tline, '^% .*\% conditional$', 'once')))
            fprintf(fout, '%s\n', tline(3:end));
        else
            fprintf(fout, '%s\n', tline);
        end
    end
end
fclose(fin);
fclose(fout);
delete foo.m
movefile('foo_edit.m', 'foo.m')
foo(5)

让Matlab为您发表评论。

....这是foo.m

function y = foo (x)
x = x*5;
% x = x+1; % conditional
x = x+20;
% x = x*2; % conditional
y = x;
end

答案 1 :(得分:1)

假设您有很多次执行的行,您可以通过将它们写入单独的函数来节省一些时间。

以下是如何做到这一点:

  1. 使用所有行创建函数(称为full.m)
  2. 确定您需要哪些行,将其放在向量v
  3. 将full.m导入为名为full的单元格数组,(您可以右键单击并执行导入,此处还可以创建脚本以自动执行此操作)
  4. 将其写入名为reduced:
  5. 的文件

    写作可以这样完成:

    dlmwrite('reduced.m',vertcat(full{v}),'')
    

答案 2 :(得分:0)

if - 声明可能是最快的可能,请使用它。您也可以将文件作为文本文件读取,并使用eval运行您想要的部分。在没有测试的情况下,我确信if - 语句更快或速度相同,使用eval经常搞砸JIT编译器。