【发布时间】:2015-10-09 11:53:51
【问题描述】:
我正在使用 scipy 中的 linalg 来获取 155X156 矩阵的特征值和特征向量。然而,与矩阵相比,特征值的顺序似乎是随机的。我希望第一个特征值对应于矩阵中的第一个数字。请看下面我的例程。我首先读取一个包含所有像这样的浮点数的文件(1_1o.dat)
2533297.650278 -2373859.531153
37695.845843 425449.129032
然后我将它们作为数组读取
[2533297.650278, -2373859.531153, 37695.845843, 425449.129032...]
然后重塑为 156X156 矩阵。我希望按照读取矩阵的顺序打印所有特征值和相应的特征向量。我知道最后我的特征值(156 个数字)应该从小到大列出,而不是像当前例程那样随机列出。当然,相应特征向量的顺序相同。谁能帮我解决这个问题?
谢谢。
from scipy import linalg
from scipy.linalg import *
file2 = open('1_1f.dat', 'w')
with open('1_1o.dat', 'rU') as file:
File = file.readlines()
nums2 = np.array(File)
nums2 = [float(i.rstrip('\n')) for i in nums2[0].split()]
nums2 = np.reshape(nums2, (156, 156))
print eig(nums2)
print >> file2, eig(nums2)
file2.close()
【问题讨论】:
-
您是否检查过
numpy.linalg.det(nums2-eig(nums2)*numpy.eye(nums2.shape)) == 0或者您如何得出这些值是随机顺序的结论?您是否检查了可以手动解决的最小示例? -
我在这里查看mathresource.iitb.ac.in/linear%20algebra/mainchapter10.3.html 并尝试这个小矩阵 a = np.array([[3, 1, -1], [1, 3, -1], [-1 , -1, 5]]) 打印 eig(a)。 Python 以 6、2、3 的顺序打印特征值,因为在网络上解决了这个问题,对角线是 2、3、6。我在 156X156 矩阵上观察到的相同变化(我知道最终结果应该是什么)。所以我不确定问题出在哪里,以及我是否误解了取消国籍的程序。
标签: python