Module slowpca.slowpca
Performing PCA based on covariance/corrleation.
Expand source code
# -*- coding: utf-8 -*-
"""Performing PCA based on covariance/corrleation."""
import numpy as np
def perform_pca(data, corr=False):
"""Perform PCA.
This method performs PCA based on covariance or correlation.
Parameters
----------
data : ndarray
Coordinate trajectory file of shape (n_frames, n_coords).
corr : bool, default=False
If `True` correlation is used instead of covariance.
Returns
-------
proj, evecs : ndarray
Projection and eigenvectors.
"""
"""Perform PCA based on covariance/correlation."""
# scaler data to make mean-free (std-free)
data = data - np.mean(data, axis=0)
if corr:
data = data / np.std(data, axis=0, ddof=1)
# calculate cov/corr matrix and diagonalize
cov = np.cov(data, rowvar=False)
evals, evecs = np.linalg.eigh(cov)
# sort evals and evecs
idx_sort = np.argsort(evals)[::-1]
evals, evecs = evals[idx_sort], evecs[:, idx_sort]
# project the data to ev
proj = data @ evecs
return proj, evecs
Functions
def perform_pca(data, corr=False)-
Perform PCA.
This method performs PCA based on covariance or correlation.
Parameters
data:ndarray- Coordinate trajectory file of shape (n_frames, n_coords).
corr:bool, default=False- If
Truecorrelation is used instead of covariance.
Returns
proj,evecs:ndarray- Projection and eigenvectors.
Expand source code
def perform_pca(data, corr=False): """Perform PCA. This method performs PCA based on covariance or correlation. Parameters ---------- data : ndarray Coordinate trajectory file of shape (n_frames, n_coords). corr : bool, default=False If `True` correlation is used instead of covariance. Returns ------- proj, evecs : ndarray Projection and eigenvectors. """ """Perform PCA based on covariance/correlation.""" # scaler data to make mean-free (std-free) data = data - np.mean(data, axis=0) if corr: data = data / np.std(data, axis=0, ddof=1) # calculate cov/corr matrix and diagonalize cov = np.cov(data, rowvar=False) evals, evecs = np.linalg.eigh(cov) # sort evals and evecs idx_sort = np.argsort(evals)[::-1] evals, evecs = evals[idx_sort], evecs[:, idx_sort] # project the data to ev proj = data @ evecs return proj, evecs