2017-04-07 2 views
0

Ich bekomme eine PEP8 Beschwerde über numpy.where(mask == False) wo Maske ist ein Boolean Array. Der PEP8-Empfehlungsvergleich sollte entweder "wenn Bedingung falsch ist" oder "wenn Bedingung nicht" sein. Was ist die Pythonische Syntax für den vorgeschlagenen Vergleich innerhalb numpy.where()?Pythonische Array Indizierung mit Boolean Maskierung Array

+1

Welchen PEP8-Tester verwenden Sie? PEP8 ist eine allgemeine Python-Stil-Empfehlung. Es ist nicht an "numpy" angepasst. Dein Ausdruck sieht für mich vollkommen in Ordnung aus. – hpaulj

+1

'mask == False' ist das gleiche wie' ~ mask', aber ganz anders als 'mask is False' oder' not mask'. – hpaulj

+0

@hpaulj Ich benutze pycharm und seine native code inspection ist glaube ich mit pep8 v '1.7.0' – ktavabi

Antwort

1

Die Negierung eines booleschen Maskenarrays in NumPy ist ~mask.

Denken Sie auch darüber nach, ob Sie überhaupt where benötigen. Scheinbar am häufigsten ist some_array[np.where(some_mask)], aber das ist nur eine unnötig wortreiche und ineffiziente Art, some_array[some_mask] zu schreiben.

+0

Die Boolesche Indizierung dauert genauso lange wie die Where-Version. Ich denke, das bedeutet, es gibt ein implizites 'wo'. https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#boolean-array-indexing – hpaulj

+0

@hpaulj: IIRC, für komplexere Fälle, ruft NumPy 'nonzero', aber für einfache Fälle, Es umgeht das und verwendet die boolesche Maske direkt. – user2357112

+0

@hpaulj: Siehe den 'array_boolean_subscript' Code in [' numpy/core/src/multiarray/mapping.c'] (https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray /mapping.c). Die Zeitpunkte, die ich bekomme, sind jedoch nicht das, was ich erwartet habe. Bei einigen Eingaben ist 'where' tatsächlich schneller! – user2357112