NumPy

2012-02-06 6 views
13

में एकवचनता के कारण अवैध मैट्रिक्स ऑपरेशन को छोड़कर कैसे प्रयास करें, न्यूमप्पी में, मैं न्यूटन-रैफसन योजना के प्रत्येक चरण में मैट्रिक्स इनवर्क्स की गणना करने के लिए linalg का उपयोग करने की कोशिश कर रहा हूं (समस्या का आकार जानबूझकर छोटा है ताकि हम विश्लेषणात्मक रूप से गणना हेसियन matrices उलटा कर सकते हैं)। हालांकि, जब मैं अभिसरण की ओर बहुत दूर जाता हूं, तो हेसियन एकवचन के करीब आता है।NumPy

क्या न्यूमपी के भीतर कोई तरीका है जो मुझे यह जांचने देता है कि मैट्रिक्स को एकवचन माना जाता है (कंप्यूटिंग निर्धारक पर्याप्त मजबूत नहीं है)? आदर्श रूप से, यह अच्छा होगा अगर tryexcept ब्लॉक का उपयोग करने के लिए NumPy की एकवचन सरणी त्रुटि को पकड़ने का कोई तरीका है।

मैं यह कैसे करूँगा? टर्मिनल पर दिए गए NumPy त्रुटि है:

raise LinAlgError, 'Singular matrix' 
numpy.linalg.linalg.LinAlgError: Singular matrix 

उत्तर

24

वाक्य रचना इस तरह होगा:

import numpy 

try: 
    # your code that will (maybe) throw 
except numpy.linalg.linalg.LinAlgError as err: 
    if 'Singular matrix' in err.message: 
     # your error handling block 
    else: 
     raise 
+0

धन्यवाद। यह उन सिर-स्लैपिंग "डी ओह" क्षणों में से एक है; मुझे एहसास नहीं हुआ कि हम सीधे 'छोड़कर' कथन में NumPy त्रुटियों का उपयोग कर सकते हैं। – ely

+0

इसके अलावा, क्या यह 'सिंगुलर मैट्रिक्स' के लिए विशिष्ट बनाने और LinAlgError के किसी भी उदाहरण के लिए कोई तरीका नहीं है? – ely

+1

ठीक है, आप पकड़े गए अपवाद को फिर से उठा सकते हैं यदि यह संदेश नहीं है .. मेरे उत्तर में नवीनतम संपादन देखें। यह करने का यह एक तरीका है, मुझे यकीन नहीं है कि शायद एक बेहतर तरीका है या नहीं। – wim

3

wim के जवाब नहीं रह गया है NumPy के वर्तमान संस्करण के लिए काम करता है (मैं कम से 1.13 उपयोग कर रहा हूँ लेखन का समय)। इसके बजाए:

import numpy as np 

try: 
    # your code that will (maybe) throw 
except np.linalg.LinAlgError as e: 
    if 'Singular matrix' in str(e): 
     # your error handling block 
    else: 
     raise 

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

  • कोई संबंधित समस्या नहीं^_^