2012-04-10 16 views
5

मैं मैट्रिक्स के eigenvalues ​​और eigenvectors प्राप्त करने के लिए linalg.eig (ए) का उपयोग कर रहा हूँ। क्या इन eigenvalues ​​(और जुड़े वैक्टर) क्रमबद्ध करने के लिए कोई आसान तरीका है?पायथन numpy sort eigenvalues ​​

+0

संभावित डुप्लिकेट: http://stackoverflow.com/questions/8092920/sort-eigenvalues-and-associated-eigenvectors-after-using-numpy-linalg-eig-in-pyt – amcnabb

उत्तर

7

आप NumPy sort() और argsort() फ़ंक्शंस का उपयोग करना चाहते हैं। argsort() एक सरणी सॉर्ट करने के लिए की जरूरत सूचकांक के क्रमचय देता है, इसलिए यदि आप eigenvalue परिमाण द्वारा क्रमबद्ध करना चाहते हैं (NumPy सरणी के लिए मानक प्रकार छोटी से छोटी-से-बड़ा हो रहा है), तो आप कर सकते हैं:

import numpy as np 

A = np.asarray([[1,2,3],[4,5,6],[7,8,9]]) 
eig_vals, eig_vecs = np.linalg.eig(A) 

eig_vals_sorted = np.sort(eig_vals) 
eig_vecs_sorted = eig_vecs[:, eig_vals.argsort()] 


# Alternatively, to avoid making new arrays 
# do this: 

sort_perm = eig_vals.argsort() 

eig_vals.sort()  # <-- This sorts the list in place. 
eig_vecs = eig_vecs[:, sort_perm] 
+7

आपके दूसरे उदाहरण में, कोई आवश्यकता नहीं है eig_vals पर फिर से कॉल करें(), आपके पास पहले से sort_perm है। i.e. eig_vals = eig_vals [sort_perm] – user545424

+0

अच्छा बिंदु! मुझे यकीन नहीं था कि टुकड़ा नोटेशन '[]' का उपयोग सूची की एक अतिरिक्त प्रति बना दिया गया है। मेरी सोच यह थी कि उनमें से कम से कम एक जगह पर किया जा सकता है, और मुझे नहीं पता था कि 'a = a [sort_perm] '' a.sort() 'के रूप में कुशल है या नहीं। – ely

+0

हाँ, मैं थोड़ा बेंचमार्किंग कर सकता हूं और परिणाम – user545424

-2

np.linalg.eig अक्सर जटिल मूल्यों को वापस कर देगा। आप np.sort_complex(eig_vals) का उपयोग करने पर विचार करना चाह सकते हैं।