Как узнать собственные векторы, соответствующие конкретному собственному значению матрицы?

Как узнать собственные векторы, соответствующие конкретному собственному значению?

У меня есть стохастическая матрица (P), одно из собственных значений которой равно 1. Мне нужно найти собственный вектор, соответствующий собственному значению 1.

Функция scipy scipy.linalg.eig возвращает массив собственных значений и собственных векторов.

D, V = scipy.linalg.eig(P) 

Здесь D (массив значений) и V (массив векторов) являются обоими векторами.

Один из способов – выполнить поиск в D и извлечь соответствующий собственный вектор в V. Есть ли более простой способ?

  • Деление Numles Cholesky LinAlgError
  • Как читать часть двоичного файла с numpy?
  • Быстрое (er) причудливое индексирование и сокращение?
  • Python: поиск нескольких корней нелинейного уравнения
  • Does Conda заменяет необходимость в virtualenv?
  • Ошибка выполнения griddata - Python / SciPy (Интерполяция)
  • Как правильно передать scipy.sparse CSR-матрицу в функцию cython?
  • Эффективный метод расчета плотности нерегулярно разнесенных точек
  • 2 Solutions collect form web for “Как узнать собственные векторы, соответствующие конкретному собственному значению матрицы?”

    Если вы ищете один собственный вектор, соответствующий одному собственному значению, было бы гораздо эффективнее использовать реализацию scipy.sparse.linalg функции eig . Он позволяет искать фиксированное количество собственных векторов и перемещать поиск по определенному значению. Вы можете сделать, например:

     values, vectors = scipy.sparse.linalg.eigs(P, k=1, sigma=1) 
     import numpy as np import numpy.linalg as linalg P = np.array([[2, 0, 0], [0, 1, 0], [0, 0, 3]]) D, V = linalg.eig(P) print(D) # [ 2. 1. 3.] 

    Собственными векторами являются столбцы V:

     V = VT for val, vec in zip(D, V): assert np.allclose(np.dot(P, vec), val*vec) 

    Таким образом, собственный вектор, соответствующий собственному значению 1.0, равен

     def near(a, b, rtol = 1e-5, atol = 1e-8): return np.abs(ab)<(atol+rtol*np.abs(b)) print(V[near(D, 1.0)]) # [[ 0. 1. 0.]] 

    Поскольку может быть более одного собственного вектора с одним и тем же собственным значением, V[near(D, 1.0)] возвращает двумерный массив – каждая строка массива является собственным вектором с собственным значением 1.0.

    Interesting Posts

    Как мне взаимодействовать с MATLAB с Python?

    Причина синтаксической ошибки «return out of function» в Python?

    Как сравнить два объекта JSON с одинаковыми элементами в другом порядке равными?

    Почему MYSQL DB возвращает поврежденное значение при усреднении по Django models.DateTimeField?

    Динамически привязывающие методы Python к экземпляру правильно связывают имена методов, но не метод

    как явно построить ось y с помощью python

    Как я могу переместить объект даты в другой языковой стандарт?

    Конфигурация ConfigParser и импорта

    python xlwt устанавливает пользовательский цвет фона ячейки

    Как сделать запросы urllib2 через Tor в Python?

    Как определить десятичный класс, содержащий 1000 цифр в python?

    Почему многопроцессорность использует только одно ядро ​​после импорта numpy?

    Вертикальная линия в конце гистограммы CDF с использованием matplotlib

    Как определить регион, страну и континент на основе города с помощью Python?

    Статистическое масштабирование автокорреляции с использованием numpy.fft

    Python - лучший язык программирования в мире.