Source code for heavyedge_landmarks.scale

"""Within-sample scaling of landmarks."""

import numpy as np

__all__ = [
    "minmax",
]


[docs] def minmax(Xs): """Within-sample min-max scaling of landmarks. Parameters ---------- Xs : array, shape (N, m, k) `N` configuration matrices of `k` landmarks in dimension `m`. Returns ------- Xs_scaled : array, shape (N, m, k) Min-max scaled configuration matrices. Examples -------- >>> from heavyedge import get_sample_path, ProfileData >>> from heavyedge_landmarks import pseudo_landmarks, minmax >>> with ProfileData(get_sample_path("Prep-Type2.h5")) as data: ... x = data.x() ... Ys, Ls, _ = data[:] >>> Xs = pseudo_landmarks(x, Ys, Ls, 10) >>> Xs_scaled = minmax(Xs) >>> import matplotlib.pyplot as plt # doctest: +SKIP ... fig = plt.figure() ... ax1 = fig.add_subplot(211) ... ax1.plot(*Xs.transpose(1, 2, 0)) ... ax1.set_aspect("equal") ... ax1.set_title("Original") ... ax2 = fig.add_subplot(212) ... ax2.plot(*Xs_scaled.transpose(1, 2, 0)) ... ax2.set_aspect("equal") ... ax2.set_title("Scaled") """ _, m, _ = Xs.shape ret = np.empty_like(Xs) for i in range(m): coords = Xs[:, i, :] minval = coords.min(axis=1, keepdims=True) maxval = coords.max(axis=1, keepdims=True) ret[:, i, :] = (Xs[:, i, :] - minval) / (maxval - minval) return ret