Source code for beatmap.utils._utils

import numpy as np


[docs]def index_of_value(array, value): """ Finds the index of a value in an array most similar to value passed. Parameters ---------- array : array Array of values. value : numeric Value you wish to find in array. Returns ------- idx : array For 2D idx[0] = i index, idx[1] = j index. """ X = np.abs(array - value) idx = np.where(X == 0) return idx
[docs]def max_min(array): """Finds maximum and minimum of an array. If multiple max and min values exist, all are returned. Parameters ---------- array : array Array of values. Returns ------- maximum : float Maximum value of array. max_idx : array For 2D max_idx[0] = i index, max_idx[1] = j index. minimum : float Minimum value of array. min_idx : array For 2D min_idx[0] = i index, min_idx[1] = j index """ maximum = np.nanmax(array[np.nonzero(array)]) minimum = np.nanmin(array[np.nonzero(array)]) max_idx = index_of_value(array, maximum) min_idx = index_of_value(array, minimum) return maximum, max_idx, minimum, min_idx
[docs]def lin_interp(df, val): """Linerarly interpolates between two points. Specifically designed to find the relp corresponding to some value of n. Parameters ---------- df : dataframe Contains raw data, realtaive pressure (relp) and amount adsorbed (n). Returns ------- interp_val : float The relp corresponding to some n, between two (n, relp) points. """ hindex = len(df[df['n'] <= val]) if hindex == len(df): hindex = hindex - 1 lindex = hindex - 1 if hindex == 0: lindex = 0 m = 0 else: m = ((df.loc[hindex, 'relp'] - df.loc[lindex, 'relp']) / (df.loc[hindex, 'n'] - df.loc[lindex, 'n'])) b = df.loc[hindex, 'relp'] - df.loc[hindex, 'n'] * m interp_val = m * val + b return interp_val