2016-08-09 4 views
0

私の質問に一般的な答えがあるかどうかはわかりませんが、アレイのマスキングやスライスが配列の一部だけを操作する方が「良い」のだろうかと思います。 「より良い」とは、パフォーマンス(操作の実行速度、メモリオーバヘッド、すなわち中間配列など)に関してのことです。どちらを使用するかについての経験則はありますか?スライスまたはマスキング?

+0

のための簡単で高速であることが証明された場合より基本的な 'my_array [my_boolean_mask]'はコピーを作成します。それはどういう意味ですか? – Julien

+0

スライシングはメモリーを解放するので、より良い結果が得られます。マスキングするとキャッシュに保持されます。 – thesonyman101

+0

私は 'np.ma'を意味しました。私はスライスの方法として 'my_array [my_boolean_mask]'を理解しました。 – orange

答えて

0

これらはtimeit

別の配列

% timeit z = x[[np.arange(0,10000,2)]] 
#output: 10000 loops, best of 3: 41.9 µs per loop 

または、インデックス付き配列

% timeit x[[np.arange(0,10000,2)]] = 1 
#output: 1000 loops, best of 3: 151 µs per loop 

に値を代入すると、今度は、試してみましょうにインデックス付きの値を割り当てる

import numpy as np 

x= np.arange(10000) 

% timeit x[[np.arange(0,10000,2)]] 
#output: 10000 loops, best of 3: 41.4 µs per loop 

を使用して、いくつかの結果でありますマスキングを使用して同じ:

x = np.ma.array(np.arange(10000)) 

% timeit x.mask = [1 if i%2==0 else 0 for i in np.arange(10000)] 
#output: 100 loops, best of 3: 11.6 ms per loop 

あなたはまだnumpyの中でインデックス化

maskValues = [1 if i%2==0 else 0 for i in np.arange(10000)] 

% timeit x.mask = maskValues 
# output: 1000 loops, best of 3: 712 µs per loop 

を保存マスクする値は、多分 `np.ma`かを使用するものとして解釈「マスクされた」この例