Numpy en 'True' değil Python en 'True' ve bunun is
başarısız aynı 'True' için '=='
>>> 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'>
Ayrıca özellikle PEP 8 DONT kullanımı 'olduğunu' diyor ya Boolean:
Don't compare boolean values to True or False using ==:
Yes: if greeting:
No: if greeting == True:
Worse: if greeting is True:
boş numpy dizisi sadece boş Python liste veya boş dict Test Falsey yapar yapar:
>>> [bool(x) for x in [[],{},np.array([])]]
[False, False, False]
Python, tek Falsey elemanın bir numpy dizisi aksine
testi Falsey yapar:
>>> [bool(x) for x in [[False],[0],{0:False},np.array([False]), np.array([0])]]
[True, True, True, False, False]
Ama birden fazla elemanı ile numpy dizisi ile bu mantığı kullanamazsınız: 'Yani
>>> 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()
>>> np.where(np.array([0,0]))
(array([], dtype=int64),)
>>> np.where(np.array([0,1]))
(array([1]),)
Veya kullanmak any
: Numpy ile PEP 8 ruhu' sadece her öğenin truthiness test etmek muhtemelen
>>> np.array([0,0]).any()
False
>>> np.array([0,1]).any()
True
Ve bu ne bekliyoruz olmadığını unutmayın: np.where
yana
>>> bool(np.where(np.array([0,0])))
True
boş olmayan bir başlığın dönüyor.
Bu PEP8 E712'yi nereden buluyorsunuz? – mgilson
Bu "pep8" aracı tarafından özel bir teşhis çıktı: https://github.com/jcrocholl/pep8/blob/master/pep8.py#L900. Bu durumda yanlış olduğunu unutmayın, çünkü 'a True' bir dizi ile ilgili anlamlı bir şey değildir. – nneonneo
@mgilson Ayrıca python 'linter' için arama yapabilirsiniz. Çoğu/bazı IDE'lerin kodunuzun pep8 kontrolünü yapmak için eklentileri vardır. – Framester