2017-04-07 4 views
0

numpy.where(mask == False)についてはPEP8の苦情があります。ここで、マスクはブール配列です。 PEP8の推奨比較は、「条件が偽である場合」または「条件でない場合」のいずれかである必要があります。提案された比較のためのpythonic構文は、numpy.where()の内部には何ですか?ブーリアンマスキング配列によるPythonic配列のインデックス

+1

どのPEP8テスターを使用していますか? PEP8は一般的なPythonスタイルの勧告です。 'numpy'には適応していません。あなたの表情は私にとっては完璧に見えます。 – hpaulj

+1

'mask == False'は'〜mask'と同じですが、 'mask is False'や' not mask'とはまったく異なります。 – hpaulj

+0

@hpaulj私はpycharmを使用し、そのネイティブコード検査はpep8 v '1.7.0' – ktavabi

答えて

1

NumPyでブール値のマスク配列を無効にすると、~maskになります。

また、実際にwhereが必要かどうかを検討してください。最も一般的に使用されていると思われるのはsome_array[np.where(some_mask)]ですが、それはちょうど不必要な言葉遣いであり、非効率的な方法であるsome_array[some_mask]です。

+0

ブール索引付けは、 'where'バージョンと同じ時間がかかります。私は暗黙の 'where'があることを意味すると思います。 https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#boolean-array-indexing – hpaulj

+0

@hpaulj:IIRCより複雑なケースでは、NumPyは 'nonzero'を呼び出しますが、単純なケースでは、これをバイパスしてブールマスクを直接使用します。 – user2357112

+0

@hpaulj:['numpy/core/src/multiarray/mapping.c']の' array_boolean_subscript'コードを参照してください(https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray)。 /mapping.c)。私が得るタイミングは、私が期待したものではありません。いくつかの入力では、 'where'は実際にはより高速です! – user2357112

関連する問題