code: def _separate_epochs(activity_data, epoch_list):
      """create data epoch by epoch
  
      Separate data into epochs of interest specified in epoch_list
      and z-score them for computing correlation
  
      Parameters
      ----------
      activity_data: list of 2D array in shape [nVoxels, nTRs]
          the masked activity data organized in voxel*TR formats of all subjects
      epoch_list: list of 3D array in shape [condition, nEpochs, nTRs]
          specification of epochs and conditions
          assuming all subjects have the same number of epochs
          len(epoch_list) equals the number of subjects
  
      Returns
      -------
      raw_data: list of 2D array in shape [epoch length, nVoxels]
          the data organized in epochs
          and z-scored in preparation of correlation computation
          len(raw_data) equals the number of epochs
      labels: list of 1D array
          the condition labels of the epochs
          len(labels) labels equals the number of epochs
      """
      time1 = time.time()
      raw_data = []
      labels = []
      for sid in range(len(epoch_list)):
          epoch = epoch_list[sid]
          for cond in range(epoch.shape[0]):
              sub_epoch = epoch[cond, :, :]
              for eid in range(epoch.shape[1]):
                  r = np.sum(sub_epoch[eid, :])
                  if r > 0:  # there is an epoch in this condition
                      # mat is row-major
                      # regardless of the order of acitvity_data[sid]
                      mat = activity_data[sid][
                          :, sub_epoch[eid, :] == 1
                      ]
                      mat = np.ascontiguousarray(mat.T)
                      mat = zscore(mat, axis=0, ddof=0)
                      # if zscore fails (standard deviation is zero),
                      # set all values to be zero
                      mat = np.nan_to_num(mat)
                      mat = mat / math.sqrt(r)
                      raw_data.append(mat)
                      labels.append(cond)
      time2 = time.time()
      logger.debug(
          "epoch separation done, takes %.2f s" % (time2 - time1)
      )
      return raw_data, labels
  
file_path: brainiak/brainiak/fcma/preprocessing.py
imports: import math
  import time
  import numpy
  import logging
  from scipy.stats.mstats import zscore
  from mpi4py import MPI
  from enum import Enum
  from ..image import mask_images, multimask_images
label_desc: Use image node_id 1 for calling a global function with example usage: _separate_epochs(activity_data, epoch_list) and returns: raw_data,  labels