我正在使用linalg.eig(A)來獲取矩陣的特徵值和特徵向量。有沒有簡單的方法來排序這些特徵值(和相關向量)?python numpy排序特徵值
回答
您想使用NumPy sort()
和argsort()
函數。 argsort()
返回數組排序需要指數的排列,所以如果你想通過特徵值大小進行排序(用於與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]
在你的第二個例子中,不需要再次調用eig_vals上的sort(),你已經有了sort_perm。即eig_vals = eig_vals [sort_perm] – user545424 2012-04-10 16:25:14
好點!我不確定是否使用切片符號'[]'製作了列表的額外副本。我的想法是,他們中的至少一個可以完成,我不知道'a = a [sort_perm]'是否與'a.sort()'一樣高效。 – ely 2012-04-10 19:18:39
是啊,我可以做一個基準測試併發布結果 – user545424 2012-04-10 19:57:48
np.linalg.eig
通常會返回複雜的值。您可能需要考慮使用np.sort_complex(eig_vals)
。
- 1. 按特徵值排序特徵向量(相關排序)
- 2. 網格上的排序特徵值和特徵向量
- 3. 使用Numpy的特徵向量值
- 4. numpy的特徵值的精度h
- 5. Python Numpy排序行
- 6. 如何找到沒有numpy和scipy的特徵向量和特徵值?
- 7. 使用兩個最低特徵值和特徵向量在圖中繪製numpy
- 8. 如何排序獨特的特徵::矢量的特徵::矢量?
- 9. Python,numpy排序數組
- 10. Python Numpy Recarray排序雙向
- 11. 複數矩陣的Numpy特徵值/特徵向量似乎是錯誤的?
- 12. 本徵態在python中具有特定的特徵值
- 13. MATLAB:按排序順序從`eigs`獲取小的特徵值
- 14. Numpy特徵向量不是特徵向量?
- 15. 特徵重新排序行無複製
- 16. 對元素的特徵排序矢量
- 17. 傑基爾排序特徵字符
- 18. [R特徵值/特徵向量
- 19. cvBlobsLib的特徵向量和特徵值
- 20. cvBlobsLib的特徵向量和特徵值
- 21. Python(numpy)排序字符順序?
- 22. Numpy - 模態矩陣和對角線特徵值
- 23. MatLab中的特徵值和厄米特矩陣的numpy之間的差異
- 24. Python的OpenCV的PCACompute特徵值
- 25. Python中的廣義特徵值
- 26. MNIST Python numpy特徵向量可視化錯誤
- 27. 重新排列特徵庫中Schur因子分解的特徵值
- 28. 訪問特徵值
- 29. 特徵值分解
- 30. 的Python(NumPy的)數組排序
可能的重複:http://stackoverflow.com/questions/8092920/sort-eigenvalues-and-associated-eigenvectors-after-using-numpy-linalg-eig-in-pyt – amcnabb 2013-05-07 17:58:10