Numpy की 'यह सच है' है नहीं के रूप में अजगर की 'यह सच है' और वजह is
विफल रहता है एक ही 'यह सच है':
>>> 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'>
इसके अलावा, विशेष रूप से, पीईपी 8 कहते हैं DONT उपयोग 'है' या '==' के लिए बूलियन्स:
Don't compare boolean values to True or False using ==:
Yes: if greeting:
No: if greeting == True:
Worse: if greeting is True:
एक खाली numpy सरणी सिर्फ एक खाली अजगर सूची या खाली dict के रूप में परीक्षण falsey करता है:
>>> [bool(x) for x in [[],{},np.array([])]]
[False, False, False]
अजगर, एक भी falsey तत्व की एक numpy सरणी के विपरीत परीक्षण falsey करता है:
>>> [bool(x) for x in [[False],[0],{0:False},np.array([False]), np.array([0])]]
[True, True, True, False, False]
लेकिन आप एक से अधिक तत्व के साथ एक numpy सरणी के साथ उस तर्क का उपयोग नहीं कर सकते हैं:
>>> 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]),)
या any
का उपयोग करें:: Numpy साथ पीईपी 8 की भावना 'शायद ही प्रत्येक तत्व के truthiness परीक्षण करने के लिए है
>>> np.array([0,0]).any()
False
>>> np.array([0,1]).any()
True
और ध्यान रखें कि यह नहीं है कि आप क्या उम्मीद हो:
>>> bool(np.where(np.array([0,0])))
True
np.where
के बाद से एक अरिक्त टपल लौटा रहा है।
आप यह पीईपी 8 ई 712 कहां ढूंढ रहे हैं? – mgilson
यह 'pep8' टूल द्वारा एक विशिष्ट नैदानिक आउटपुट है: https://github.com/jcrocholl/pep8/blob/master/pep8.py#L900। ध्यान दें कि इस मामले में यह गलत है क्योंकि 'एक सत्य है' एक सरणी के साथ एक सार्थक बात नहीं है। – nneonneo
@ मिगिलसन आप पाइथन 'लिटर' की खोज भी कर सकते हैं। अधिकांश/कुछ आईडीई में आपके कोड की पेप 8 जांच करने के लिए प्लगइन होते हैं। – Framester