code: def wpearsonr(x, y, w=None):
      """Utility function to calculate the weighted Pearson correlation of two
      samples.
  
      See https://stats.stackexchange.com/questions/221246/such-thing-as-a-weighted-correlation
      for more information
  
      Parameters
      ----------
      x : array, shape (n,)
          Input x.
  
      y : array, shape (n,)
          Input y.
  
      w : array, shape (n,)
          Weights w.
  
      Returns
      -------
      scores : float in range of [-1,1]
          Weighted Pearson Correlation between x and y.
  
      """
  
      # unweighted version
      # note the return is different
      # TODO: fix output differences
      if w is None:
          return pearsonr(x, y)
  
      x = np.asarray(x)
      y = np.asarray(y)
      w = np.asarray(w)
  
      check_consistent_length([x, y, w])
      # n = len(x)
  
      w_sum = w.sum()
      mx = np.sum(x * w) / w_sum
      my = np.sum(y * w) / w_sum
  
      xm, ym = (x - mx), (y - my)
  
      r_num = np.sum(xm * ym * w) / w_sum
  
      xm2 = np.sum(xm * xm * w) / w_sum
      ym2 = np.sum(ym * ym * w) / w_sum
  
      r_den = np.sqrt(xm2 * ym2)
      r = r_num / r_den
  
      r = max(min(r, 1.0), -1.0)
  
      # TODO: disable p value calculation due to python 2.7 break
      #    df = n_train_ - 2
      #
      #    if abs(r) == 1.0:
      #        prob = 0.0
      #    else:
      #        t_squared = r ** 2 * (df / ((1.0 - r) * (1.0 + r)))
      #        prob = _betai(0.5 * df, 0.5, df / (df + t_squared))
      return r
  
file_path: pyod/pyod/utils/stat_models.py
imports: from __future__ import division
  from __future__ import print_function
  import numpy
  from numba import njit
  from scipy.stats import pearsonr
  from sklearn.utils.validation import check_array
  from sklearn.utils.validation import check_consistent_length
label_desc: Use image node_id 3 for calling a global function with example usage: wpearsonr(x, y, w) and returns: r, pearsonr