Module pycpd.utility
Expand source code
import numpy as np
def is_positive_semi_definite(R):
if not isinstance(R, (np.ndarray, np.generic)):
raise ValueError('Encountered an error while checking if the matrix is positive semi definite. \
Expected a numpy array, instead got : {}'.format(R))
return np.all(np.linalg.eigvals(R) > 0)
def gaussian_kernel(X, beta, Y=None):
if Y is None:
Y = X
diff = X[:, None, :] - Y[None, :, :]
diff = np.square(diff)
diff = np.sum(diff, 2)
return np.exp(-diff / (2 * beta**2))
def low_rank_eigen(G, num_eig):
"""
Calculate num_eig eigenvectors and eigenvalues of gaussian matrix G.
Enables lower dimensional solving.
"""
S, Q = np.linalg.eigh(G)
eig_indices = list(np.argsort(np.abs(S))[::-1][:num_eig])
Q = Q[:, eig_indices] # eigenvectors
S = S[eig_indices] # eigenvalues.
return Q, S
Functions
def gaussian_kernel(X, beta, Y=None)
-
Expand source code
def gaussian_kernel(X, beta, Y=None): if Y is None: Y = X diff = X[:, None, :] - Y[None, :, :] diff = np.square(diff) diff = np.sum(diff, 2) return np.exp(-diff / (2 * beta**2))
def is_positive_semi_definite(R)
-
Expand source code
def is_positive_semi_definite(R): if not isinstance(R, (np.ndarray, np.generic)): raise ValueError('Encountered an error while checking if the matrix is positive semi definite. \ Expected a numpy array, instead got : {}'.format(R)) return np.all(np.linalg.eigvals(R) > 0)
def low_rank_eigen(G, num_eig)
-
Calculate num_eig eigenvectors and eigenvalues of gaussian matrix G. Enables lower dimensional solving.
Expand source code
def low_rank_eigen(G, num_eig): """ Calculate num_eig eigenvectors and eigenvalues of gaussian matrix G. Enables lower dimensional solving. """ S, Q = np.linalg.eigh(G) eig_indices = list(np.argsort(np.abs(S))[::-1][:num_eig]) Q = Q[:, eig_indices] # eigenvectors S = S[eig_indices] # eigenvalues. return Q, S