2011-09-12 5 views
2

大規模な配列の場合、複数の条件が真であるか両方とも偽であるかどうかを確認する最速の方法は何ですか?オペレーターの選択は違いを生みますか?なぜ、なぜそうではないのですか?ここではダミーの例である:2つの条件が真であるかどうかを確認する最速の方法は何ですか?

import numpy 
a = numpy.ones((1000000,)) 
b = numpy.zeros((1000000,)) 

#c = (a == 1) * (b == 0) 
#c = (a == 1) & (b == 0) 
# other faster method of getting c? 

予告編集...

+1

条件が常に両方のアレイで同じではないことを確認してください。 – Benjamin

+2

この最適化は重要ですか?コードをプロファイリングしましたが、このセクションが遅すぎると判断しましたか? – Daenyth

+0

@Daenyth:ちょうど好奇心。 – Benjamin

答えて

0

私は、これはスピードのために重要でますので、わからないんだけど、あなたは、この場合、インプレース演算を使って、メモリを節約することができます。これは、アレイの1つの少なく一時的なコピーを必要とし、少ないメモリを使用する必要があります

c = a == 1 
c &= b == 0 # (Or *=) 

のようなものを試してみてください。

+0

良い点。 &=より速いか= =またはそれと同等ですか? – Benjamin

+0

私の知る限り、通常の状況では大きな違いはありません。私の素早く汚れたプロファイリングは合っているようです。 –

0

Short-circuitingの演算子を利用する場合があります。この短絡は、異なるオペレータの状況によって異なります。

+0

numpy配列の場合、これは役に立ちません。結果は同じ長さの別の配列です。短絡することはありません。 –

関連する問題