2015-12-26 8 views
27
x = np.arange(0,2,0.5) 
valeur = 2*x 

if valeur <= 0.6: 
    print ("this works") 
else: 
    print ("valeur is too high") 
यहाँ

त्रुटि मैं मिलता है अभी भी एक ऐसा तरीका नहीं मिल रहा है जो वास्तव में स्पष्ट रूप से स्पष्ट करता है कि समस्या को कैसे ठीक किया जाए। मैं देखता हूं कि पाइथन ने जो लिखा है उसे पसंद नहीं है लेकिन मुझे यकीन नहीं है कि इसे कैसे ठीक किया जाए।उपयोग a.any() या a.all()

+4

'valeur' एक वेक्टर है जिसमें कुछ तत्व 0.6 से छोटे और कुछ बड़े होते हैं। 'Valeur <= 0.6' के साथ आपका क्या मतलब है? – Daniel

+0

valeur एक वेक्टर है [0. 1. 2. 3.] मुझे प्रत्येक शब्द में दिलचस्पी है। 0.6 से नीचे के हिस्से के लिए, फिर "यह काम" लौटाएं। 0.6 से ऊपर के हिस्से के लिए, "वैलेर बहुत अधिक है" लौटाएं, यह एक गूंगा संस्करण है, जहां इसे मुद्रित करने या स्थिति के आधार पर मुद्रित करने के बजाय, मैं –

+2

की स्थिति के आधार पर वैलेर के प्रत्येक तत्व को समीकरण 1 या समीकरण 2 में खिला रहा हूं। एक वेक्टर के लिए एक एकल मूल्य की तुलना करना संतरे और सेब की तुलना करना है, 'कोई भी() 'और' सभी() 'वे कार्य हैं जो सत्यापित करते हैं कि यह स्थिति वेक्टर में किसी भी तत्व से संतुष्ट है या सभी तत्व संतुष्ट हैं शर्त – saljuama

उत्तर

41

आप valeur <= 0.6 का परिणाम पर एक नज़र डालें, तो आप देख सकते हैं कि इस अस्पष्टता पैदा:

>>> valeur <= 0.6 
array([ True, False, False, False], dtype=bool) 

तो परिणाम एक और सरणी इस मामले में 4 बूलियन मूल्यों में की गई है। अब परिणाम क्या होना चाहिए? क्या एक शर्त सही होने पर स्थिति सच होनी चाहिए? क्या स्थिति केवल तभी सच होनी चाहिए जब सभी मूल्य सत्य हों?

यह वही है जो numpy.any और numpy.all करते हैं। पूर्व कम से कम एक सही मूल्य की आवश्यकता है, बाद की आवश्यकता है कि सभी मूल्यों सत्य हैं:

>>> np.any(valeur <= 0.6) 
True 
>>> np.all(valeur <= 0.6) 
False 
1

आप टिप्पणी:

valeur एक सदिश के बराबर है [0. 1. 2. 3.] मुझे प्रत्येक शब्द में दिलचस्पी है। 0.6 से नीचे के हिस्से के लिए, फिर "यह काम" लौटाएं ....

यदि आप प्रत्येक शब्द में रुचि रखते हैं, तो कोड लिखें ताकि यह प्रत्येक के साथ संबंधित हो। उदाहरण के लिए।

for b in valeur<=0.6: 
    if b: 
     print ("this works") 
    else: 
     print ("valeur is too high") 

यह 2 लाइनें लिखेंगे।

त्रुटि numpy कोड द्वारा उत्पादित की जाती है जब आप इसे एक संदर्भ का उपयोग करने का प्रयास करते हैं जो एकल, स्केलर, मान की अपेक्षा करता है। if b:... केवल एक चीज कर सकता है। यह स्वयं के द्वारा b के तत्वों के माध्यम से प्रत्येक के लिए एक अलग चीज़ नहीं करता है।

आप सूची समझ के रूप में पुनरावृत्ति को भी डाल सकते हैं, उदा।

['yes' if b else 'no' for b in np.array([True, False, True])] 
संबंधित मुद्दे