Source code for eotransform_xarray.functional.stats

from typing import Optional

import numpy as np
import scipy
from numpy._typing import NDArray


[docs]def calc_person_r_element_wise(x: NDArray, y: NDArray, mask: NDArray, limit: int, out: NDArray) -> None: for i in range(out.shape[0]): for j in range(out.shape[1]): m = ~mask[i, j] xt = np.extract(m, x[i, j]) yt = np.extract(m, y[i, j]) if len(xt) > limit: out[i, j, 0] = scipy.stats.pearsonr(xt, yt).statistic conf = scipy.stats.pearsonr(xt, yt).confidence_interval() out[i, j, 1] = conf.low out[i, j, 2] = conf.high
[docs]def pearsonr(x: NDArray, y: NDArray, min_obs: Optional[int] = 2) -> NDArray: nan_mask = np.isnan(x) | np.isnan(y) x[nan_mask] = np.nan y[nan_mask] = np.nan r = np.full(x.shape[:2] + (3,), np.nan) calc_person_r_element_wise(x, y, nan_mask, min_obs, r) return r