def __init__(self, points: np.array, epsilon: float,
cut_off: Optional[float] = None,
num_eigenpairs: Optional[int] = default.num_eigenpairs,
normalize_kernel: Optional[bool] = True,
renormalization: Optional[float] = default.renormalization,
kdtree_options: Optional[Dict] = None,
use_cuda: Optional[bool] = default.use_cuda) -> None:
self.points = points
self.epsilon = epsilon
if cut_off is not None:
import warnings
warnings.warn('A cut off was specified for dense diffusion maps.')
distance_matrix_squared = scipy.spatial.distance.pdist(points, metric='sqeuclidean') # noqa
kernel_matrix = np.exp(-distance_matrix_squared / (2.0 * epsilon))
kernel_matrix = scipy.spatial.distance.squareform(kernel_matrix)
if normalize_kernel is True:
kernel_matrix = self.normalize_kernel_matrix(kernel_matrix,
renormalization)
self.kernel_matrix = kernel_matrix
self.renormalization = renormalization if normalize_kernel else None
if use_cuda is True:
import warnings
warnings.warn('Dense diffusion maps are not implemented on the '
'GPU. Using the CPU instead.')
ew, ev = self.solve_eigenproblem(self.kernel_matrix, num_eigenpairs,
use_cuda=False)
if np.linalg.norm(ew.imag > 1e2 * sys.float_info.epsilon, np.inf):
raise ValueError('Eigenvalues have non-negligible imaginary part')
self.eigenvalues = ew.real
self.eigenvectors = ev.real
评论列表
文章目录