gpt4 book ai didi

python - 在 Python 中查找对称矩阵的 SVD

转载 作者:行者123 更新时间:2023-12-05 07:48:12 27 4
gpt4 key购买 nike

我知道 np.linalg.svd(A) 会返回矩阵 A 的 SVD。

A=u * np.diag(s) * v

但是如果它是一个对称矩阵,你只需要一个酉矩阵:

A=v.T * np.diag(s) * v

在 R 中我们可以使用 La.svd(A,nu=0) 但是在 Python 中是否有任何函数可以加速对称矩阵的 SVD 过程?

最佳答案

在对称矩阵的 SVD 中,只有当 A 的特征值都为正时,U=V 才有效。否则 V 将几乎等于 U 但不完全等于 U,因为对应于负特征值的 V 的某些列将是 U 的对应列的负值。因此,A=v.T * np.diag(s ) * v 仅当 A 的所有特征值都为正时才有效。

假设对称矩阵是一个 real matrix ,奇异值分解的U矩阵就是特征向量矩阵本身,奇异值为矩阵特征值的绝对值,V矩阵与U矩阵相同,只是负特征值对应的列是U列的负值。

因此,通过找出特征值和特征向量,可以计算 SVD。

Python代码:

import numpy as np

def svd_symmetric(A):
[s,u] = np.linalg.eig(A) #eigenvalues and eigenvectors
v = u.copy()
v[:,s<0] = -u[:,s<0] #replacing the corresponding columns with negative sign
s = abs(s)
return [u, s, v.T]


n = 5
A = np.matrix(np.random.rand(n,n)) # a matrix of random numbers
A = A.T+A #making it a symmetric matrix
[u, s, vT] = svd_symmetric(A)
print(u * np.diag(s) * vT)

这会打印与 A 相同的矩阵。

(注意:我不知道它是否适用于复杂的矩阵。)

关于python - 在 Python 中查找对称矩阵的 SVD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38878576/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com