def evd(Vorg,
no_order=None,
no_samples=1000):
n = Vorg - np.mean(Vorg, axis=0)
y0 = np.mean(Vorg, axis=0)
Rnn = np.dot(n.T, n) / n.shape[0]
if no_order is not None:
w, v = np.linalg.eig(Rnn)
w, v = w[:no_order], v[:,:no_order]
Rnn = np.dot(np.dot(v, np.diag(w)), v.T)
Rnn = np.abs(Rnn)
new_n = np.random.randn(no_samples, Vorg.shape[1])
y = y0.reshape(1,-1) + np.dot(new_n, linalg.sqrtm(Rnn))
y = np.real(y)
return y
评论列表
文章目录