使用枚举的性能问题

时间:2012-10-16 22:59:34

标签: matlab enums

我在MATLAB中有一个for循环(我知道,我知道 - 我应该使用矢量化,但在这个特殊情况下它才有意义循环)用一个值替换矢量的某些元素。此向量是自定义枚举数据类型。与使用内置数据类型的类似方法相比,替换速度非常慢(请参阅下面的简单测试结果)。我预计会有一些差异,但三个数量级似乎很高。 这是一个知道问题吗?

要重新创建问题,请创建以下枚举:

classdef MyEnum

    enumeration
        TRUE
        FALSE
        INDETERMINATE
    end

end

初始化一个向量并在循环中进行一些替换:

>> v = repmat(MyEnum.TRUE, 100000, 1);
>> tic; for ii = 1:length(v); v(ii) = MyEnum.FALSE; end; toc;
Elapsed time is 0.824617 seconds.

将此与使用内置类型的类似方法进行比较:

>> v = true(100000, 1);
>> tic; for ii = 1:length(v); v(ii) = false; end; toc;
Elapsed time is 0.000950 seconds.

2 个答案:

答案 0 :(得分:4)

您在每次迭代时添加一个方法调用,这通常是一个缓慢的操作。此外,正如所讨论的here,Matlab中的OOP效率特别低。阅读SO问题,有一些有趣的细节,包括在较新的Matlab版本中讨论性能加速。

答案 1 :(得分:0)

根据我的经验,MyEnum.FALSE篇幅可能很慢。每当我需要做类似的事情时,我首先提取枚举值,即

falseVal = MyEnum.FALSE; for ii = 1:N, v(ii) = falseVal; end

这可能至少部分有用。