【发布时间】:2021-11-15 10:06:29
【问题描述】:
我在 Python 中使用了大小为 64*64 的矩阵 A 的 svd,如下所示。
U,D,V=svd(A)
现在,D 是 A 的所有特征值的数组。如何将D 中的所有值重写为对角矩阵?比如D=[d1,d2,d3,d4],怎么有
D_new=[[d1,0,0,0],[0,d2,0,0],[0,0,0,d3],[0,0,0,d4]]?
【问题讨论】:
我在 Python 中使用了大小为 64*64 的矩阵 A 的 svd,如下所示。
U,D,V=svd(A)
现在,D 是 A 的所有特征值的数组。如何将D 中的所有值重写为对角矩阵?比如D=[d1,d2,d3,d4],怎么有
D_new=[[d1,0,0,0],[0,d2,0,0],[0,0,0,d3],[0,0,0,d4]]?
【问题讨论】:
使用 numpy :
import numpy as np
d = [d1,d2,d3]
diagonal = np.diag(d)
【讨论】:
diagonal^(-1/2)?
diagonal**(-1/2)。但是,它不会起作用,因为您将拥有 1/0,它将被计算为 inf (infinity)
D = np.array(d) 然后是 D**(-1/2) 然后是 diagonal = np.diag(D)
根据特征值的长度创建一个零的空向量,然后在遍历列表时分配位置,追加以创建对角矩阵
d=['d1','d2','d3','d4']
dnew=[]
for i,x in enumerate(d):
vec=[0 for x in d]
vec[i]=d[i]
dnew.append(vec)
for x in dnew:
print(x)
['d1', 0, 0, 0]
[0, 'd2', 0, 0]
[0, 0, 'd3', 0]
[0, 0, 0, 'd4']
【讨论】: