code: def _correlation_normalization(self, corr):
          
          time1 = time.time()
          (sv, e, av) = corr.shape
          for i in range(sv):
              start = 0
              while start < e:
                  cur_val = corr[i, start: start + self.epochs_per_subj, :]
                  cur_val = .5 * np.log((cur_val + 1) / (1 - cur_val))
                  corr[i, start: start + self.epochs_per_subj, :] = \
                      zscore(cur_val, axis=0, ddof=0)
                  start += self.epochs_per_subj
          # if zscore fails (standard deviation is zero),
          # set all values to be zero
          corr = np.nan_to_num(corr)
          time2 = time.time()
          logger.debug(
              'within-subject normalization for %d voxels '
              'using numpy zscore function, takes %.2f s' %
              (sv, (time2 - time1))
          )
          return corr
docs: Do within-subject normalization.
  
          This method uses scipy.zscore to normalize the data,
          but is much slower than its C++ counterpart.
          It is doing in-place z-score.
  
          Parameters
          ----------
          corr: 3D array in shape [num_processed_voxels, num_epochs, num_voxels]
              the correlation values of all subjects in all epochs
              for the assigned values, in row-major
  
          Returns
          -------
          corr: 3D array in shape [num_processed_voxels, num_epochs, num_voxels]
              the normalized correlation values of all subjects in all epochs
              for the assigned values, in row-major