Source code for ms2pip.correlation

import numpy as np


[docs] def pearson(x: np.ndarray, y: np.ndarray) -> float: """Fast Pearson correlation for two 1D arrays.""" xm = x - x.mean() ym = y - y.mean() denom = np.sqrt((xm @ xm) * (ym @ ym)) if denom == 0: return 0.0 return float(xm @ ym / denom)
[docs] def ms2pip_pearson(true, pred): """Calculate Pearson correlation, including tic-normalization and log-transformation.""" def tic_norm(x): return x / np.sum(x) def log_transform(x): return np.log2(x + 0.001) return pearson(log_transform(tic_norm(true)), log_transform(tic_norm(pred)))
[docs] def spectral_angle(true, pred, epsilon=1e-7): """ Calculate square root normalized spectral angle. See https://doi.org/10.1074/mcp.O113.036475. """ pred_norm = pred / max(np.linalg.norm(pred), epsilon) true_norm = true / max(np.linalg.norm(true), epsilon) spectral_angle = 1 - (2 * np.arccos(np.dot(pred_norm, true_norm)) / np.pi) return spectral_angle