Python 使用np.linalg.svd()查找特征向量和特征值?

Python 使用np.linalg.svd()查找特征向量和特征值?,python,python-3.x,numpy,Python,Python 3.x,Numpy,我试图找到PCA协方差矩阵的特征向量和特征值 我的代码: values, vectors = np.linalg.eigh(covariance_matrix) 这是输出: Eigen Vectors: [[ 0.26199559 0.72101681 -0.37231836 0.52237162] [-0.12413481 -0.24203288 -0.92555649 -0.26335492] [-0.80115427 -0.14089226 -0.02109478 0.581

我试图找到PCA协方差矩阵的特征向量和特征值

我的代码:

values, vectors = np.linalg.eigh(covariance_matrix)
这是输出:

Eigen Vectors: 
[[ 0.26199559  0.72101681 -0.37231836  0.52237162]
 [-0.12413481 -0.24203288 -0.92555649 -0.26335492]
 [-0.80115427 -0.14089226 -0.02109478  0.58125401]
 [ 0.52354627 -0.6338014  -0.06541577  0.56561105]]

Eigen Values: 
[0.02074601 0.14834223 0.92740362 2.93035378]
然后我发现
np.linalg.svd()
也返回相同的值

U, S, V = np.linalg.svd(standardized_x.T)
print(U)
print(S)
print(V)
[[-0.52237162 -0.37231836  0.72101681  0.26199559]
 [ 0.26335492 -0.92555649 -0.24203288 -0.12413481]
 [-0.58125401 -0.02109478 -0.14089226 -0.80115427]
 [-0.56561105 -0.06541577 -0.6338014   0.52354627]]

[20.89551896 11.75513248  4.7013819   1.75816839]

[[ 1.08374515e-01  9.98503796e-02  1.13323362e-01 ... -7.27833114e-02
  -6.58701606e-02 -4.59092965e-02]
 [-4.30198387e-02  5.57547718e-02  2.70926177e-02 ... -2.26960075e-02
  -8.64611208e-02  1.89567788e-03]
 [ 2.59377669e-02  4.83370288e-02 -1.09498919e-02 ... -3.81328738e-02
  -1.98113038e-01 -1.12476331e-01]
 ...
 [ 5.42576376e-02  5.32189412e-03  2.76010922e-02 ...  9.89545817e-01
  -1.40226565e-02 -7.86338250e-04]
 [ 1.60581494e-03  8.56651825e-02  1.78415121e-01 ... -1.24233079e-02
   9.52228601e-01 -2.19591161e-02]
 [ 2.27770498e-03  6.44405862e-03  1.49430370e-01 ... -6.58105858e-04
  -2.32385318e-02  9.77215825e-01]]
结果
U(本征向量)
对于
np.linalg.eigh()
svd()
都是相同的,但是
S(方差/本征值)
值不相同

我错过什么了吗?
有谁能解释一下,在np.linalg.svd()函数中,U、S和V代表什么??

特征向量并不完全相同;
eigh
的最后一个结果是
svd
@user8408080的第一个结果的负数,谢谢。我没有完全注意到。有什么原因吗?我对这些功能不是很熟悉;它可能只是一个实现细节;两种解决方案都是正确的