Python NumPy вычислить первое собственное значение и собственный вектор - PullRequest
7 голосов
/ 20 октября 2011

Мне было интересно, есть ли пакет Python, numpy или другой, который имеет функцию, которая вычисляет первое собственное значение и собственный вектор малой матрицы, скажем, 2x2. Я мог бы использовать пакет linalg в numpy следующим образом.

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. Кто-нибудь знает что-нибудь об этом? Пожалуйста помоги! Заранее спасибо!

Ответы [ 3 ]

5 голосов
/ 19 марта 2014
2 голосов
/ 15 мая 2013

По документам:

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)
0 голосов
/ 20 октября 2011

Похоже, что нет ничего эквивалентного eigs(A,B,k) Matlab для нахождения k наибольших собственных векторов.

Если вам интересно, Enthought составил таблицу, в которой показаны различия между Matlab и numpy. Это должно быть полезно для ответов на такие вопросы: http://www.scipy.org/NumPy_for_Matlab_Users

Еще одна мысль, для матриц 2x2, я не думаю, что eigs(A,B,1) все равно поможет. Усилие, затрачиваемое на вычисление первой собственной пары, оставляющей матрицу преобразованной туда, где непосредственно появляется вторая Выгода только для 3х3 и больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...