Numpy 如何标准化特征向量?

问题描述 投票:0回答:1

我试图了解 numpy 如何通过命令 np.linalg.eig() 标准化特征向量,因为它似乎没有使用标量因子来标准化它们。例如,它将特征向量 [3,0,-1] 标准化为 [0.194078, -0.955099, -0.223876],这对我来说没有意义,因为如果以通常的方式标准化,中间的数字将保持为零。那么,有人可以解释 numpy 用于计算和标准化特征值的过程吗?我正在尝试了解这个过程,看看它是否是可逆的。

我尝试过标准标量归一化和标准单位归一化,但它们没有产生相同的结果。

代码:

import numpy as np
import scipy
from numpy.linalg import eig

a1=np.array([[4,-1,6],[2,1,6],[2,-1,8]])
w, eigenvectors = np.linalg.eig(a1)
trueeigens = np.array([[1,1,1],[-3,0,1],[1,2,0]])

trueeigens 是手工计算时的真实特征向量,eigenvectors 是 Numpy 给出的特征向量,不确定为什么会有差异

python numpy matrix linear-algebra eigenvector
1个回答
0
投票

Numpy 将特征向量归一化为欧几里得 (L2) 范数 1,不一定对特征向量的每个分量使用标量。归一化应用于整个向量,而不是每个单独的分量。

例如,对于特征向量 ( v ),Numpy 将其缩放为 ( |v|_2 = 1 ),其中 ( |v|_2 ) 是 ( v ) 的欧几里德范数。

如果原始向量是( [x, y, z] ),归一化后将是:

[ \left[ rac{x}{\sqrt{x^2 + y^2 + z^2}}, rac{y}{\sqrt{x^2 + y^2 + z^2}}, rac {z}{\sqrt{x^2 + y^2 + z^2}} 右]]

因此,即使其中一个分量为零,如您的示例( [0, -1, 0] ),标准化后它仍然为零,因为除以范数不会影响零元素。非零元素被适当缩放。

Numpy使用的具体流程是其基于LAPACK例程的数值算法的一部分,保证了数值的稳定性和效率。结果是特征向量被归一化,其大小为 1,这是特征向量数值计算的常见做法。

© www.soinside.com 2019 - 2024. All rights reserved.