Мне было интересно, почему знак элементов в собственных векторах из Armadillo противоположен другим языкам, таким как Python (т.е. numpy) и R.
Например:
C++
using namespace arma;
vec eigval;
mat eigvec;
// C++11 initialization
mat A = { 1, -1, 0, -1, 2, -1, 0, -1, 1};
eig_sym(eigval, eigvec, A);
eigvec.print("Eigen Vectors");
Выход
Eigen Vectors
-5.7735e-01 -7.071068e-01 0.4082483
-5.7735e-01 9.714451e-e17 -0.8164966
-5.7735e-01 7.017068e-01 0.4082483
питон
import numpy as np
w,v = np.linalg.eig(np.array([[1,-1,0],[-1,2,-1],[0,-1,1]]))
v
Выход
array([[ -4.08248290e-01, -7.07106781e-01, 5.77350269e-01],
[ 8.16496581e-01, 2.61214948e-16, 5.77350269e-01],
[ -4.08248290e-01, 7.07106781e-01, 5.77350269e-01]])
R
eigen(matrix(c(1,-1,0,-1,2,-1,0,-1,1), 3, byrow=TRUE)$vectors
Выход
-4.082483e-01 -7.071068e-01 5.773503e-01
8.164966e-01 9.420555e-16 5.773503e-01
-4.082483e-01 7.071068e-01 5.773503e-01
Вы можете видеть, что Python и R предоставляют одни и те же собственные векторы (за исключением ошибок округления). Результат броненосца действительно дает те же числа (порядок - это простое исправление), но знак в первом и третьем столбцах противоположен соответствующим столбцам в Python и R. Я что-то здесь упустил?
v
— собственный вектор, тоav
(a — действительное число) также является собственным вектором. Обычное соглашение состоит в том, чтобы их нормализовать, но в то же время они могут указывать в любом из двух возможных направлений. - person 463035818_is_not_a_number   schedule 04.03.2015