Source code for wormpose.pose.eigenworms

"""
Utility functions to deal with eigenworms
"""

import numpy as np


[docs]def load_eigenworms_matrix(eigenworms_matrix_path: str) -> np.ndarray: """ Load eigenworms matrix into numpy array from csv file :param eigenworms_matrix_path: path of the csv file :return: numpy array of the eigenworms matrix """ return ( np.loadtxt(eigenworms_matrix_path, delimiter=",").astype(float) if eigenworms_matrix_path is not None else None )
[docs]def theta_to_modes(theta: np.ndarray, eigenworms_matrix: np.ndarray) -> np.ndarray: """ Convert angles to modes with an eigenworms matrix. We subtract the mean angle before converting. :param theta: angle vector, numpy array of shape (N,) :param eigenworms_matrix: :return: the modes corresponding to the angles """ return (theta - np.mean(theta)).dot(eigenworms_matrix)
[docs]def modes_to_theta(modes: np.ndarray, eigenworms_matrix: np.ndarray) -> np.ndarray: """ Convert modes to angles with an eigenworms matrix :param modes: :param eigenworms_matrix: :return: the angles corresponding to the modes """ return modes.dot(eigenworms_matrix[:, : len(modes)].T)