8

小さな行列、たとえば2x2の最初の固有値と固有ベクトルを計算する関数を備えたPythonパッケージ(numpyなど)があるかどうか疑問に思いました。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になります。 。誰かがこれについて何か知っていますか?助けてください!前もって感謝します!

4

3 に答える 3

6

これを使用してください:http://docs.scipy.org/doc/scipy/reference/sparse.linalg.html

http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.eigs.html#scipy.sparse.linalg.eigs

Find k eigenvalues and eigenvectors of the square matrix A.
于 2014-03-19T13:21:27.623 に答える
2

ドキュメントによると:

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)
于 2013-05-15T16:01:42.187 に答える
1

k個の最大の固有ベクトルeigs(A,B,k)を見つけるためのMatlabに相当するものはありません。

興味があれば、EnthoughtはMatlabとnumpyの違いを示す表をまとめました。これは、次のような質問に答えるのに役立つはずです: http ://www.scipy.org/NumPy_for_Matlab_Users

eigs(A,B,1)もう1つの考えは、2x2行列の場合、とにかく役に立たないと思います。行列を残して最初の固有ペアを計算し、2番目の固有ペアが直接現れる場所に変換する作業。3x3以上の場合にのみメリットがあります。

于 2011-10-20T17:08:02.123 に答える