Python numpy计算第一特征值和特征值

2024-06-24 13:53:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有一个Python包,numpy或者其他,它有一个计算小矩阵的第一个特征值和特征向量的函数,比如2x2。我可以在纽比使用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。有人知道这件事吗?请帮忙!提前谢谢你!


Tags: the函数importnumpythatasnp矩阵
3条回答

根据文件:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.eig.html

而且根据我自己的经验,numpy.linalg.eig(A)并没有按照任何特定的顺序对特征向量进行排序,这是OP和后续的假设。我建议如下:

rearrangedEvalsVecs = sorted(zip(evals,evecs.T),\
                                    key=lambda x: x[0].real, reverse=True)

在寻找最大特征向量时,似乎没有一个与Matlab的eigs(A,B,k)等价的数值。

如果您感兴趣,enthough已经编译了一个表,显示了Matlab和numpy之间的差异。这应该有助于回答像这样的问题:http://www.scipy.org/NumPy_for_Matlab_Users

另一个想法是,对于2x2矩阵,我认为eigs(A,B,1)无论如何都没有帮助。计算第一个特征对所需的工作,将矩阵变换到第二个特征对直接出现的地方。只有3x3和更大的才有好处。

相关问题 更多 >