

def _make_interpolation_matrix(pos_from, pos_to, alpha=1e-05):
    'Compute interpolation matrix based on spherical splines\n\n    Implementation based on [1]\n\n    Parameters\n    ----------\n    pos_from : np.ndarray of float, shape(n_good_sensors, 3)\n        The positions to interpoloate from.\n    pos_to : np.ndarray of float, shape(n_bad_sensors, 3)\n        The positions to interpoloate.\n    alpha : float\n        Regularization parameter. Defaults to 1e-5.\n\n    Returns\n    -------\n    interpolation : np.ndarray of float, shape(len(pos_from), len(pos_to))\n        The interpolation matrix that maps good signals to the location\n        of bad signals.\n\n    References\n    ----------\n    [1] Perrin, F., Pernier, J., Bertrand, O. and Echallier, JF. (1989).\n        Spherical splines for scalp potential and current density mapping.\n        Electroencephalography Clinical Neurophysiology, Feb; 72(2):184-7.\n    '
    pos_from = pos_from.copy()
    pos_to = pos_to.copy()
    _normalize_vectors(pos_from)
    _normalize_vectors(pos_to)
    cosang_from = pos_from.dot(pos_from.T)
    cosang_to_from = pos_to.dot(pos_from.T)
    G_from = _calc_g(cosang_from)
    G_to_from = _calc_g(cosang_to_from)
    if (alpha is not None):
        G_from.flat[::(len(G_from) + 1)] += alpha
    n_channels = G_from.shape[0]
    C = np.r_[(np.c_[(G_from, np.ones((n_channels, 1)))], np.c_[(np.ones((1, n_channels)), 0)])]
    C_inv = linalg.pinv(C)
    interpolation = np.c_[(G_to_from, np.ones((G_to_from.shape[0], 1)))].dot(C_inv[:, :(- 1)])
    return interpolation

dataset/ETHPy150Open mne-tools/mne-python/mne/channels/interpolation.py _make_interpolation_matrix/original