У меня есть матрица T
:умножения блок Numpy LHS собственный вектор раз в NumPy матрицу
[ 0.2 0.4 0.4]
[ 0.8 0.2 0. ]
[ 0.8 0. 0.2]
Я хочу, чтобы умножить его на вектор л.ш. строк (s1, s2, s3) и установите выражение продукта, равное элементы соответствующего вектора ок столбца, поэтому было бы
vl * T = s(..., ..., ...)
Это будет эквивалентно решением трех линейных уравнений, из которых вы можете решить для элементов собственных векторов с точностью до множителя масштабирования. Установка суммы элементов, равных 1, затем дает единицу собственного вектора.
Например, для начала, умножая вектор строки lhs на первый столбец матрицы и установив произведение, равное s1, вы получите уравнение 0,2 x s1 + 0,8 x s2 + 0,8 x s3 = s1.
Остальные два уравнения получены путем умножения вектора строки lhs на второй и третий столбцы матрицы и установки продуктов, равных s2 и s3, соответственно. Решение этих трех уравнений даст вам относительные значения среди s1, s2 и s3. После этого суммирование этих равных 1 даст вам элементы собственного вектора.
Я хочу сделать это с помощью питона, вот моя попытка:
>>> import numpy as np
>>> from scipy.linalg import eig
>>> np.set_printoptions(precision=4)
>>> T = np.mat("0.2 0.4 0.4;0.8 0.2 0.0;0.8 0.0 0.2")
>>> np.set_printoptions(precision=4)
>>> w, vl, vr = eig(T, left=True)
>>> vlUnit = vl[:,1]/sum(vl[:,1])
>>> s = vlUnit
>>> s
array([ 7.3543e+15, -3.6772e+15, -3.6772e+15])
Так что я знаю, как vl
и VlUnit
являются тип numpy.array
и T
матрично
Я также не могу прочитать результаты s
,
Я конвертировал и его 7354300000000000, -3677200000000000, 3677200000000000
, которые не выглядят мне прямо. Что я делаю не так??
Спасибо,
Chris
v1Unit не является единичный вектор (если это то, что вам нужно). Единичные векторы вы получаете путем деления на длину (квадрат суммы квадратов элементов). Кроме того, если s является всего лишь единичным вектором, почему бы не назвать это напрямую? – deinonychusaur
deinonychusaur, спасибо! Я не знал ... –
deinonychusaur любые советы о том, как это сделать? –