3

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

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

类定义 MyEnum

    枚举
        真的
        错误的
        不定
    结尾

结尾

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

>> v = repmat(MyEnum.TRUE, 100000, 1);
>> 抽动; 对于 ii = 1:长度(v);v(ii) = MyEnum.FALSE; 结尾; 目录;
经过的时间是 0.824617 秒。

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

>> v = true(100000, 1);
>> 抽动; 对于 ii = 1:长度(v);v(ii) = 假;结尾; 目录;
经过的时间是 0.000950 秒。
4

2 回答 2

4

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

于 2012-10-16T23:09:22.223 回答
0

In my experience, it's likely to be the MyEnum.FALSE piece that's slow. Whenever I've needed to do anything similar, I extract the enum value first, i.e.

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

That might help at least in part.

于 2012-10-17T07:41:13.670 回答