docs: def to_tf_matrix(expression_matrix,
                   gene_names,
                   tf_names):
      """
      :param expression_matrix: numpy matrix. Rows are observations and columns are genes.
      :param gene_names: a list of gene names. Each entry corresponds to the expression_matrix column with same index.
      :param tf_names: a list of transcription factor names. Should be a subset of gene_names.
      :return: tuple of:
               0: A numpy matrix representing the predictor matrix for the regressions.
               1: The gene names corresponding to the columns in the predictor matrix.
      """
  
      tuples = [(index, gene) for index, gene in enumerate(gene_names) if gene in tf_names]
  
      tf_indices = [t[0] for t in tuples]
      tf_matrix_names = [t[1] for t in tuples]
  
      return expression_matrix[:, tf_indices], tf_matrix_names