code: def quantile_norm(X):
      
      # compute the quantiles
      quantiles = np.mean(np.sort(X, axis=0), axis=1)
  
      # compute the column-wise ranks. Each observation is replaced with its
      # rank in that column: the smallest observation is replaced by 1, the
      # second-smallest by 2, ..., and the largest by M, the number of rows.
      ranks = np.apply_along_axis(stats.rankdata, 0, X)
  
      # convert ranks to integer indices from 0 to M-1
      rank_indices = ranks.astype(int) - 1
  
      # index the quantiles for each rank with the ranks matrix
      Xn = quantiles[rank_indices]
  
      return(Xn)
docs: Normalize the columns of X to each have the same distribution.
  
      Given an expression matrix (microarray data, read counts, etc) of M genes
      by N samples, quantile normalization ensures all samples have the same
      spread of data (by construction).
  
      The data across each row are averaged to obtain an average column. Each
      column quantile is replaced with the corresponding quantile of the average
      column.
  
      Parameters
      ----------
      X : 2D array of float, shape (M, N)
          The input data, with M rows (genes/features) and N columns (samples).
  
      Returns
      -------
      Xn : 2D array of float, shape (M, N)
          The normalized data.