Zastanawiałem się, czy jest pakiet Pythona, Numpy lub w inny sposób, ma funkcję, która oblicza pierwszą wartość własną i EIGENVECTOR MAŁY MATRIX, powiedzmy 2x2. Mogę użyć pakietu Linalg w Numpy w następujący sposób.

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]

Ale to zajmuje dużo czasu. Podejrzewam, że to dlatego, że Numpy oblicza EIGENVECTORS przez jakiś rodzaj procesu iteracyjnego. Zastanawiałem się więc, czy było znacznie szybszy algorytm, który zwraca tylko pierwszy (największy) EIGENVALUE i EIGENVECOR, ponieważ potrzebuję tylko pierwszego.

Dla 2x2 macierzy oczywiście mogę sam pisać funkcję, która oblicza analityczną wartość własną i EIGENVECOR, ale wtedy występują problemy z obliczeniami zmiennopunktowymi, na przykład, gdy podzielę bardzo duży numer przez bardzo małą liczbę, dostaję nieskończoność lub Nan . Czy ktoś coś o tym wie? Proszę pomóż! Z góry dziękuję!

8
Ray 20 październik 2011, 20:55

3 odpowiedzi

Najlepsza odpowiedź

Według dokumentów:

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

A także do mojego własnego doświadczenia, numpy.Linalg.eig (a) nie sortuje EIGENVECTORS w żadnej konkretnej kolejności, co wydaje się, że oprosiło się na op i kolejne wydają się zakładać. Proponuję coś takiego:

rearrangedEvalsVecs = sorted(zip(evals,evecs.T),\
                                    key=lambda x: x[0].real, reverse=True)
2
Josh Berryman 3 kwiecień 2014, 09:53

Nie wydaje się być numpy odpowiednikiem Matlab's {X0}} do znalezienia największych EIGENVECTORS K .

Jeśli jesteś zainteresowany, pochodzący zestawił stół pokazujący różnice między Matlab a Numpy. To powinno być pomocne, aby odpowiedzieć na pytania takie jak ta: http://www.scipy.org/numpy_for_matlab_users

Jedna inna myśl, dla matryc 2x2, nie sądzę, żeby eigs(A,B,1) pomogłaby. Wysiłek zaangażowany w obliczanie pierwszego EIGENPAI, pozostawiając macierz przekształcony, gdzie druga pojawia się bezpośrednio. Skorzysta tylko dla 3x3 i większa.

1
Raymond Hettinger 20 październik 2011, 18:02