3

私はMATLABにforループを持っています(私は知っています、私は知っています-私はベクトル化を使用する必要がありますが、この特定の場合はループするのが理にかなっています)ベクトルの特定の要素を値に置き換えます。このベクトルは、カスタム列挙データ型です。組み込みのデータ型を使用した同様のアプローチと比較して、置換は非常に時間がかかります(以下の簡単なテスト結果を参照してください)。多少の違いはあると思いますが、3桁高いようです。これは既知の問題ですか?

問題を再現するには、次の列挙を作成します。

classdef MyEnum

    列挙
        TRUE
        FALSE
        不確定
    終わり

終わり

ベクトルを初期化し、ループ内でいくつかの置換を行います。

>> v = repmat(MyEnum.TRUE、100000、1);
>>チック; ii = 1:length(v);の場合 v(ii)= MyEnum.FALSE; 終わり; toc;
経過時間は0.824617秒です。

これを、組み込みタイプを使用した同様のアプローチと比較してください。

>> v = true(100000、1);
>>チック; ii = 1:length(v);の場合 v(ii)= false; 終わり; toc;
経過時間は0.000950秒です。
4

2 に答える 2

4

反復ごとにメソッド呼び出しを追加しますが、これは一般に低速の操作です。さらに、ここで説明するように、MatlabのOOPは特に非効率的です。SOの質問を読んでください。新しいMatlabバージョンでのパフォーマンスの高速化についての説明を含むいくつかの興味深い詳細があります。

于 2012-10-16T23:09:22.223 に答える
0

MyEnum.FALSE私の経験では、それは遅い作品である可能性が高いです。同様のことをする必要があるときはいつでも、最初に列挙値を抽出します。

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

それは少なくとも部分的に役立つかもしれません。

于 2012-10-17T07:41:13.670 に答える