16

Numpy 1.4.1 で、マスクされた配列 のヒストグラムを計算する最も簡単または最も効率的な方法は何ですか? デフォルトでは、マスクされた要素を数えますnumpy.histogrampyplot.hist

私が今考えることができる唯一の簡単な解決策は、マスクされていない値で新しい配列を作成することです:

histogram(m_arr[~m_arr.mask])

ただし、これは不必要に新しい配列を作成するため、あまり効率的ではありません。より良いアイデアについて読んでいただければ幸いです。

4

4 に答える 4

16

(上記の議論に従ってこれを元に戻す...)

numpy の開発者がこれをバグまたは予想される動作と見なすかどうかはわかりません。私はメーリングリストで尋ねたので、彼らの言うことを見ると思います。

いずれにせよ、それは簡単な修正です。関数への入力ではなくnumpy/lib/function_base.py使用するパッチを適用すると、コピーを作成せずに、マスクされた配列 (または ndarray の他のサブクラス) を適切に使用できるようになります。 numpy.asanyarraynumpy.asarray

編集:期待される動作のようです。 ここで説明したように

マスクされたデータを無視したい場合は、余分な関数呼び出しだけです

ヒストグラム(m_arr.compressed())

ヒストグラム内で完全にマスクされた配列の処理ははるかに高価になると思うので、これが余分なコピーを作成するという事実は関係ないと思います。

asanyarray を使用すると、ヒストグラム計算で正しく処理されない可能性のある行列やその他のサブタイプも許可されます。

Bruce が指摘したように、マスクされた観測値を削除する以外に、ヒストグラムのマスクされた配列定義が何であるかを理解する必要があります。

于 2010-09-02T20:08:56.393 に答える
9

試してみてくださいhist(m_arr.compressed())

于 2010-09-02T04:56:29.313 に答える