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`かを使用するものとして解釈「マスクされた」この例
のための簡単で高速であることが証明された場合より基本的な 'my_array [my_boolean_mask]'はコピーを作成します。それはどういう意味ですか? – Julien
スライシングはメモリーを解放するので、より良い結果が得られます。マスキングするとキャッシュに保持されます。 – thesonyman101
私は 'np.ma'を意味しました。私はスライスの方法として 'my_array [my_boolean_mask]'を理解しました。 – orange