我在想是否有一个Python包,无论是numpy还是其他,有一个计算小矩阵(比如2x2)的第一个特征值和特征向量的函数。我可以使用numpy中的linalg包来实现以下操作。
import numpy as np
def whatever():
A = np.asmatrix(np.rand(2, 2))
evals, evecs = np.linalg.eig(A)
#Assume that the eigenvalues are ordered from large to small and that the
#eigenvectors are ordered accordingly.
return evals[0], evecs[:, 0]
但是这需要很长时间。我怀疑这是因为numpy通过某种迭代过程计算特征向量。所以我想知道是否有一种更快的算法只返回第一个(最大的)特征值和特征向量,因为我只需要第一个。
当然,对于2x2矩阵,我可以自己编写一个函数,分析计算特征值和特征向量,但是在浮点运算时会出现问题,例如当我将一个非常大的数字除以一个非常小的数字时,我会得到无穷大或NaN。有谁知道这方面的知识吗?请帮帮我!提前感谢你的帮助!
%timeit np.linalg.eig(np.random.rand(2,2))
的结果是10000 loops, best of 3: 208 us per loop
。我必须说这已经相当快了。 - Avaris