6

別の特定の値より大きい配列の最初の値を返す必要があります。私は持っている:

find(A > val, 1, 'first')

この投稿によると: https://stackoverflow.com/a/9464886/1985603この場合、検索は避けられません。しかし、どうですか:

B = A(A > val);
B(1)

余分な行以外に、ここで一方を他方の上に使用する正当な理由はありますか?

4

1 に答える 1

6

はいあります; 速度!特に大規模な配列の場合、find大幅に高速になります。

考えてみてください。操作A > valはどちらの場合も同じですが、

B = A(A > val)

から値を抽出しA、それらを新しい配列Bにコピーします。これは、割り当ててコピー割り当てする必要があり、A(A> val)一時的なものを破棄する必要があります。

論理値のリストfind(A>val, 1, 'first')をたどり、最初のtrue値に遭遇したときに単一の数値を返すだけです。これにより、無駄なコピー/割り当て/その他が大幅に削減されるため、はるかに高速になります。

経験則として、 の追加オプションを使用しない場合は、findほとんどの場合、論理インデックスを使用することをお勧めします。findの追加機能が必要な場合や使用するfind場合は、ほとんどの場合、このオプションを使用することをお勧めします。

于 2013-05-11T06:53:37.680 に答える