2012-06-18 5 views
15

SciPy और Numpy उन दोनों के बीच एक दिया वर्ग मैट्रिक्स के लिए eigenvectors को खोजने के लिए तीन अलग-अलग कार्यों, ये हैं:अजगर eigenvectors: numpy.linalg, scipy.linalg के बीच मतभेद और scipy.sparse.linalg

  1. numpy.linalg.eig(a)
  2. scipy.linalg.eig(a), और
  3. scipy.sparse.linalg.eig(A, k)

स्थिति पर विशेष रूप से ध्यान केंद्रित है कि सभी वैकल्पिक तर्क I'v ई दूर छोड़ दिया पिछले दो को उनके डिफ़ॉल्ट पर छोड़ दिया जाता है और a/A वास्तविक मूल्य है कि, मैं इन तीनों के बीच मतभेद जो दस्तावेज़ से अस्पष्ट हैं के बारे में उत्सुक हूँ - विशेष रूप से:

  • क्यों (3) एक नोट है कि यह सभी ईजिनवेक्टर नहीं मिल सकता है?
  • क्यों अन्य दो गणना सभी समाधानों की गणना करें - वे k तर्क क्यों नहीं लेते?
  • (1) में एक नोट है जिसमें कहा गया है कि eigenvalues ​​किसी विशेष क्रम में वापस नहीं आते हैं; (3) आदेश को नियंत्रित करने के लिए एक वैकल्पिक तर्क है। क्या (2) इस बारे में कोई गारंटी है?
  • क्या (3) मान लें कि A स्पैस है? (गणितीय रूप से बोलते हुए, एक स्पीसी स्पैस मैट्रिक्स के रूप में प्रतिनिधित्व करने के बजाए) क्या यह धारणा नहीं हो सकती है, या गलत परिणाम भी दे सकती है, अगर यह धारणा नहीं है?
  • क्या इनमें से कोई भी कारक चुनने पर मुझे विचार करना चाहिए?

उत्तर

12

तीसरे व्यक्ति के विशेष व्यवहार को Lanczos algorithm के साथ करना है, जो स्पैर मैट्रिस के साथ बहुत अच्छी तरह से काम करता है। scipy.sparse.linalg.eig का प्रलेखन कहता है कि यह एआरपीएक्स के लिए एक रैपर का उपयोग करता है, जो बदले में "लागू रूप से पुनरारंभ किए गए अर्नाल्डी विधि (आईआरएएम) या सममित मैट्रिस के मामले में, लैंज़ोस एल्गोरिदम के संबंधित संस्करण का उपयोग करता है।" (1)

अब, Lanczos एल्गोरिथ्म गुण है कि यह बड़े eigenvalues ​​लिए बेहतर काम करता है (वास्तव में, यह अधिकतम eigenvalue उपयोग करता है):

व्यवहार में, इस सरल एल्गोरिथ्म कंप्यूटिंग के लिए बहुत अच्छी तरह से काम नहीं करता है बहुत से eigenvectors क्योंकि किसी भी दौर-बंद त्रुटि eigenvectors गणना में वापस गणना की सटीकता को कम करने के लिए अधिक महत्वपूर्ण eigenvectors के मामूली घटकों को पेश करने के लिए प्रवृत्त होंगे। भी और उचित रूप में उन सभी को, जो शायद एल्गोरिदम पर निर्भर करता है इस्तेमाल किया - (2)

तो, जबकि Lanczos एल्गोरिथ्म केवल एक सन्निकटन है, मुझे लगता है कि अन्य दो तरीकों algos का उपयोग सटीक eigenvalues ​​को खोजने के लिए ।

6

यहाँ आपके प्रश्न का उत्तर की गैर नियमित विशिष्ट हिस्सा है:

सिद्धांत रूप में, NumPy और SciPy linalg() दिनचर्या ही होना चाहिए। दोनों आंतरिक रूप से लैपैक और बीएलएएस दिनचर्या का उपयोग करते हैं। `Scipy.sparse`` में कार्यान्वयन एक विशिष्ट एल्गोरिदम का उपयोग करता है जो स्पैर मैट्रिस के लिए अच्छा काम करता है (यानी ज्यादातर शून्य प्रविष्टियों वाले मैट्रिस)।यदि आपका मैट्रिक्स घना है तो इसका उपयोग न करें।

ध्यान दें कि तकनीकी रूप से, eig() साइपी/न्यूमपी में इस तथ्य के कारण अलग-अलग कार्यान्वयन हो सकते हैं कि दोनों पैकेज लैपैक/बीएलएएस के विभिन्न कार्यान्वयन के साथ बनाया जा सकता है। यहां सामान्य विकल्प नेटलैब, ATLAS, इंटेल एमकेएल या OpenBLAS से उपलब्ध मानक लैपैक/बीएलएएस होंगे।

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