Numpy de 'vrai' est pas le même 'vrai' comme 'vrai' et celui-ci is
échoue de Python:
>>> import numpy as np
>>> a = np.array([True, True, False])
>>> a[:]
array([ True, True, False], dtype=bool)
>>> a[0]
True
>>> a[0]==True
True
>>> a[0] is True
False
>>> type(a[0])
<type 'numpy.bool_'>
>>> type(True)
<type 'bool'>
En outre, en particulier, PEP 8 dit DONT utilisation est 'ou '==' pour booléens:
Don't compare boolean values to True or False using ==:
Yes: if greeting:
No: if greeting == True:
Worse: if greeting is True:
un tableau de numpy vide ne Falsey test comme une liste Python vide ou dict vide fait:
>>> [bool(x) for x in [[],{},np.array([])]]
[False, False, False]
Contrairement à Python, un tableau numpy d'un seul élément Falsey-t Falsey test:
>>> [bool(x) for x in [[False],[0],{0:False},np.array([False]), np.array([0])]]
[True, True, True, False, False]
Mais vous ne pouvez pas utiliser cette logique avec un tableau numpy avec plus d'un élément:
>>> bool(np.array([0,0]))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Ainsi, le ' esprit » du PEP 8 avec Numpy est probablement uniquement pour tester la truthiness de chaque élément:
>>> np.where(np.array([0,0]))
(array([], dtype=int64),)
>>> np.where(np.array([0,1]))
(array([1]),)
Ou utilisez any
:
>>> np.array([0,0]).any()
False
>>> np.array([0,1]).any()
True
Et sachez que ce n'est pas ce que vous attendez:
>>> bool(np.where(np.array([0,0])))
True
Depuis np.where
renvoie un tuple non vide.
Où trouvez-vous ce PEP8 E712? – mgilson
Ceci est une sortie de diagnostic spécifique par l'outil 'pep8': https://github.com/jcrocholl/pep8/blob/master/pep8.py#L900. Notez que c'est faux dans ce cas parce que 'a est vrai 'n'est pas une chose significative à faire avec un tableau. – nneonneo
@mgilson Vous pouvez également rechercher python 'linter'. La plupart des IDEs ont des plugins pour effectuer une vérification pep8 de votre code. – Framester