获取 scipy 中的非归一化特征向量
Get non normalized eigenvectors in scipy
Scipy 和 Numpy returns 特征向量归一化。我正在尝试将这些向量用于物理应用程序,我需要它们不被标准化。
例如
a = np.matrix('-3, 2; -1, 0')
W,V = spl.eig(a)
scipy returns [-2,-1]
的特征值 (W) 和模态矩阵 (V)(特征值作为列)[[ 0.89442719 0.70710678][ 0.4472136 0.70710678]]
我需要原始模态矩阵[[2 1][1 1]]
根据各种相关线程 (1) (2) (3),没有 "non normalized" 特征向量这样的东西。
确实,对应于矩阵A
的特征值l
的特征向量v
定义为,
A*v = l*v
因此可以乘以任何标量并保持有效。
虽然根据算法,计算出的特征向量可能具有不同于 1 的范数,但这没有任何特定意义(物理或其他),因此不应依赖。在大多数数值库(scipy、R、matlab 等)中,通常 return 归一化特征向量。
你应该看看 sympy。这个包试图通过代数计算而不是数字计算来解决这个问题(就像 numpy 所做的那样)。
import sympy as sp
sp.init_printing(use_unicode=True)
mat_a = sp.Matrix([[-3, 2], [-1, 0]])
mat_a.eigenvects()
结果是(特征值、重数、特征向量):
[(-2, 1, [[2],[1]]), (-1, 1, [[1],[1]])]
重要的是要注意归一化特征向量也可以改变向量的direction/sign。这可能会对某些应用程序产生影响,程序员应仔细检查以确保符号有意义。
Scipy 和 Numpy returns 特征向量归一化。我正在尝试将这些向量用于物理应用程序,我需要它们不被标准化。
例如
a = np.matrix('-3, 2; -1, 0')
W,V = spl.eig(a)
scipy returns [-2,-1]
的特征值 (W) 和模态矩阵 (V)(特征值作为列)[[ 0.89442719 0.70710678][ 0.4472136 0.70710678]]
我需要原始模态矩阵[[2 1][1 1]]
根据各种相关线程 (1) (2) (3),没有 "non normalized" 特征向量这样的东西。
确实,对应于矩阵A
的特征值l
的特征向量v
定义为,
A*v = l*v
因此可以乘以任何标量并保持有效。
虽然根据算法,计算出的特征向量可能具有不同于 1 的范数,但这没有任何特定意义(物理或其他),因此不应依赖。在大多数数值库(scipy、R、matlab 等)中,通常 return 归一化特征向量。
你应该看看 sympy。这个包试图通过代数计算而不是数字计算来解决这个问题(就像 numpy 所做的那样)。
import sympy as sp
sp.init_printing(use_unicode=True)
mat_a = sp.Matrix([[-3, 2], [-1, 0]])
mat_a.eigenvects()
结果是(特征值、重数、特征向量):
[(-2, 1, [[2],[1]]), (-1, 1, [[1],[1]])]
重要的是要注意归一化特征向量也可以改变向量的direction/sign。这可能会对某些应用程序产生影响,程序员应仔细检查以确保符号有意义。