def gsvd(X, M, A, n_comps = 10):
"""
Generalized SVD
:param X:
:param M:
:param A:
:return:
"""
print("GSVD")
print("GSVD: Weights... ", end='')
Xw = np.dot(np.sqrt(M), np.dot(X, np.sqrt(A)))
print("Done!")
print("GSVD: SVD... ", end='')
[P_, D, Q_] = randomized_svd(Xw, n_comps)
#P_ = P_[:,0:n_comps]
#D = D[0:n_comps]
#Q_ = Q_[0:n_comps,:]
print('Done!')
print("GSVD: Factor scores and eigenvalues... ", end='')
Mp = np.power(np.diag(M), -0.5)
Ap = np.power(np.diag(A), -0.5)
P = np.dot(np.diag(Mp), P_)
Q = np.dot(np.diag(Ap), Q_.T)
ev = np.power(D, 2)
print('Done!')
return P, D, Q, ev
评论列表
文章目录