2017-04-07 53 views
0

我得到一個關於numpy.where(mask == False)的PEP8投訴,其中mask是一個布爾數組。 PEP8建議的比較應該是「如果條件不成立」或「如果不成立」。 numpy.where()內建議比較的pythonic語法是什麼?用布爾型掩碼陣列對Pythonic數組進行索引

+1

您使用的是什麼PEP8測試儀? PEP8是一種通用的Python風格建議。它不適應'numpy'。你的表情對我來說看起來非常好。 – hpaulj

+1

'mask == False'與'〜mask'相同,但與'mask 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確實調用了「非零」,但對於簡單的情況,它繞過它並直接使用布爾掩碼。 – 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