Python环境下如何将SVD得到的特征值数组转换为对角矩阵?
Python SVD奇异值数组转对角矩阵方法
针对你64×64矩阵SVD后得到的一维奇异值数组D,有两种常用实现方案:
- 方案1:调用numpy内置方法(最简便,适配标准对角矩阵需求)
直接使用numpy.diag()即可直接生成对应尺寸的对角矩阵,代码如下:
运行后得到的import numpy as np # 你的SVD运算代码 U, D, Vh = np.linalg.svd(A) # 一维数组转对角矩阵 D_new = np.diag(D)D_new就是n×n的标准对角矩阵,主对角线元素依次对应D中的奇异值,其余位置全为0。你举的示例中D=[d1,d2,d3,d4]的场景,运行后得到的默认结果为[[d1,0,0,0],[0,d2,0,0],[0,0,d3,0],[0,0,0,d4]],如果你之前写的示例中第三行第三列为0是手误,该方案完全匹配需求。 - 方案2:手动构造(适配自定义对角位置需求)
如果你确实需要将奇异值放到非主对角线的自定义位置,可以先生成对应尺寸的零矩阵,再手动赋值元素:import numpy as np U, D, Vh = np.linalg.svd(A) # 初始化64×64的零矩阵,dtype和D保持一致 D_new = np.zeros((64, 64), dtype=D.dtype) # 标准主对角线赋值 for idx, val in enumerate(D): D_new[idx, idx] = val # 如果要实现你示例里的特殊排列,修改赋值的坐标即可,比如: # D_new[2, 3] = D[2]
内容的提问来源于stack exchange,提问作者Hermi
相关产品推荐
相关产品推荐

