0

dtype=uint8 の 3-D マスク配列があり、次のようなことをしたいのですarr.max(axis=-1)が、常に最大値を選択するのではなく、(1) 最初 (または最後) のマス化されていない要素を見つけ、(2) ランダムな任意の要素を選択したいマスクされていない要素、または (3) 軸に沿って中央値またはモードを選択しますnumpy.ma.medianscipy.stats.mstats.mode

アプローチ(3)は理想的な世界で私が望むものですが、非常に遅いです。次に、高速に実行される最大値を見つけようとしました。しかし、私は常に最大値を使用したくありません。

4

1 に答える 1

0

あなたの質問を正しく理解しているかどうかはわかりませんが、計算速度が問題でma.medianある場合は、配列のマスクされていない部分だけに対応する「通常の」numpy 関数を使用することを検討してください。

arr = ma.array(some_array)
med = ma.median(arr)                # masked array solution
med = np.median(arr.compressed())   # 'normal' function on unmasked part of arr  

圧縮部分を除けば、これは通常より遅くなるべきではありません。

更新2 つの方法の速度を確認したところです。圧縮された配列を使用する「通常の」関数は、マスクされた要素の割合に応じて、マスクされた配列ソリューションの 5 ~ 15 倍高速です ... :-)

于 2012-12-05T18:58:50.007 に答える