我在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.
答案 0 :(得分:4)
您在每次迭代时添加一个方法调用,这通常是一个缓慢的操作。此外,正如所讨论的here,Matlab中的OOP效率特别低。阅读SO问题,有一些有趣的细节,包括在较新的Matlab版本中讨论性能加速。
答案 1 :(得分:0)
根据我的经验,MyEnum.FALSE
篇幅可能很慢。每当我需要做类似的事情时,我首先提取枚举值,即
falseVal = MyEnum.FALSE; for ii = 1:N, v(ii) = falseVal; end
这可能至少部分有用。