python 计算SVD

一行代码:

u,s,v = np.linalg.svd(A)

代码分解:求解 A^{T}A 的特征值和特征向量,将特征值降序排列后对应的单位化过的特征向量,

import numpy as np


def get_A_1(B,C):
    C = np.matmul(C,np.transpose(C))
    C_1 = np.linalg.inv(C)
    C_H = np.transpose(C)
    C_f = np.matmul(C_H,C_1)

    B = np.matmul(np.transpose(B),B)
    B_1 = np.linalg.inv(B)
    B_H = np.transpose(B)
    B_f = np.matmul(B_H, B_1)

    res = np.matmul(C_f, B_f)
    return res


# A = np.array([[2,4],[1,3],[0,0],[0,0]])
A = np.array([[0,1],[1,1],[1,0]])
A_1 = np.linalg.pinv(A)



AAT = np.matmul(A,np.transpose(A))
AAT_t, AAT_t_arr = np.linalg.eig(AAT)

ATA = np.matmul(np.transpose(A), A)
ATA_t, ATA_t_arr = np.linalg.eig(ATA)
# ATA_t_arr[:,:] = ATA_t_arr[:, [1,0]]
ATA_t_arr[:, 1] = -ATA_t_arr[:, 1]
ATA_t_arr = -ATA_t_arr


UXV = np.zeros((3,2))
UXV[0,0] = np.sqrt(ATA_t[0])
UXV[1,1] = np.sqrt(ATA_t[1])
# ATA_t = np.expand_dims(ATA_t, axis=1)
# AAT_t = np.expand_dims(AAT_t, axis=0)
# ATA_t_AAT_t = np.matmul(ATA_t, AAT_t)



print("*********** A_1 ************")
print(A_1)

print("*********** ATA ************")
print(ATA)
print("*********** ATA_T ************")
print(ATA_t)
print("*********** ATA_T_arr ************")
print(ATA_t_arr)
print("*********** AAT ************")
print(AAT)
print("*********** AAT_t ************")
print(AAT_t)
print("*********** AAT_t_arr ************")
print(AAT_t_arr)
print("*********** UXV ************")
print(UXV)
print("*********** B ************")
B = np.matmul(AAT_t_arr, UXV)
print(B)
print("*********** C_T ************")
ATA_t_arr_T = np.transpose(ATA_t_arr)
print(ATA_t_arr_T)
print("*********** BC ************")
print(np.matmul(B,ATA_t_arr_T) )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值