def __compute_lanczos(self, H, G):
"""Compute change-point score using the Lanczos method.
"""
# assuming m = w
self.q, _, _ = power1(G, self.q, n_iter=1)
k = 2 * self.r if self.r % 2 == 0 else 2 * self.r - 1
T = lanczos(np.dot(H, H.T), self.q, k)
# find eigenvectors and eigenvalues of T
# eigvals, eigvecs = ln.eig(T)
eigvals, eigvecs = tridiag_eig(T, n_iter=1)
# `eig()` returns unordered eigenvalues,
# so the top-r eigenvectors should be picked carefully
return 1 - np.sqrt(np.sum(eigvecs[0, np.argsort(eigvals)[::-1][:self.r]] ** 2))
评论列表
文章目录