一行代码:
u,s,v = np.linalg.svd(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) )