2012-05-09 10 views
14

मैंने गणितीय फ़ंक्शन को वापस करने के लिए एक साधारण फ़ंक्शन डिज़ाइन किया जिसका उपयोग प्रयोगात्मक डेटा को फिट करने के लिए किया जा सकता है। कार्यों लग रहा है काफी निम्नलिखित की तरह:पायथन: फ़ंक्शन परिभाषा में numpy RuntimeWarning से कैसे बचें?

RuntimeWarning: overflow encountered in power 
RuntimeWarning: overflow encountered in divide 

मानों बहुत बड़ी या छोटी हैं की वजह से:

def colecole_2(f,*p): 
    term1=p[0] * (1 - 1/(1 + numpy.power((0+1j) * 2 * numpy.pi * f * p[1], p[2]))) 
    term2=p[3] * (1 - 1/(1 + numpy.power((0+1j) * 2 * numpy.pi * f * p[4], p[5]))) 
    return p[6]*(1-abs(term1+ term2)) 

दुर्भाग्य से मैं मुसीबतों में RunTimeWarnings साथ के रूप में चलाते हैं। हालांकि मैं इस समस्या को अपने आप पर नहीं ढूंढ पा रहा हूं। क्या मेरे फ़ंक्शन को फिर से परिभाषित करने का कोई तरीका है ताकि यह चेतावनी के बिना गुजर सके?

+0

क्या आप अपवादों को पकड़ने के बारे में जानते हैं? –

+0

@ स्टेवेन रूंबल्स्की, ये नहीं उठाए गए थे। –

+0

@ माइक ग्राहम: मेरा बुरा। मैंने आपके प्रश्न को गलत समझा * और * याद किया कि वे चेतावनी दे रहे थे। –

उत्तर

15

उपयोग numpy.seterr numpy इस परिस्थिति में क्या करता है को नियंत्रित करने के: http://docs.python.org/library/warnings.html

+0

उपेक्षा करने के लिए warnings.html reference.import चेतावनी डीईएफ़ FXN() के रूप में दी: warnings.warn ("पदावनत", DeprecationWarning) warnings.catch_warnings() के साथ : warnings.simplefilter ("उपेक्षा") FXN() – zerocog

30

आप numpy.errstate उपयोग कर सकते हैं जो एक अंतर्निहित संदर्भ है: http://docs.scipy.org/doc/numpy/reference/generated/numpy.seterr.html

नियंत्रित करने के लिए कैसे चेतावनी है या प्रस्तुत नहीं कर रहे हैं चेतावनी मॉड्यूल का उपयोग करें प्रबंधक। यह आपको कथन के संदर्भ में होने के लिए गलती को सेट करने देगा।

import numpy 
# warning is not logged here. Perfect for clean unit test output 
with numpy.errstate(divide='ignore'): 
    numpy.float64(1.0)/0.0 

मुझे कुछ विरासत पायथन कोड के लिए यूनिट परीक्षण लिखते समय हाल ही में ऐसा करना पड़ा।

+0

अब तक का सबसे अच्छा जवाब; सरल और बहुत पठनीय। –

2

इसके आसपास जाने के लिए, आप सरणी तत्वों के प्रकार को संशोधित करके परिशुद्धता बढ़ा सकते हैं जिस पर आप अपना फ़ंक्शन कॉल करते हैं।

उदाहरण के लिए, अगर एक बड़ी फ्लोटिंग बिंदु संख्या से सरणी एक तत्व के रूप में बड़ी संख्या के साथ गुणा एक अपवाद

RuntimeWarning: overflow encountered in multiply 

उसके बाद निम्न

a = np.array(a, dtype=np.float128) 

कोई चेतावनी होती है निर्दिष्ट करने पर खड़े होते हैं।

संबंधित मुद्दे