class_docstr: Abstraction for a feature matrix in which the columns are grouped into
  blocks.
  
  Parameters
  ----------
  data_blocks: list of ndarray
      Blocks of feature columns
  common_block: ndarray
      A set of feature columns that should be common to all blocks
class_docstr_tok: ["Abstraction","for","a","feature","matrix","in","which","the","columns","are","grouped","into","blocks",".","Parameters","--","--","--","--","--","data_blocks",":","list","of","ndarray","Blocks","of","feature","columns","common_block",":","ndarray","A","set","of","feature","columns","that","should","be","common","to","all","blocks"]
code: def __init__(self, data_blocks, common_block=None):
      self.n_blocks = len(data_blocks)
      self.n_samples = data_blocks[0].shape[0]
      self._data_blocks = data_blocks
      self._common_block = common_block
      self._create_block_indices()
      self._means = [
          np.mean(data_block, axis=0)
          for data_block in self._data_blocks
      ]
  
imports: from abc import ABC, abstractmethod
  import numpy
  from collections import defaultdict
  from sklearn.ensemble import BaseEnsemble
  from sklearn.ensemble._forest import _generate_unsampled_indices, _generate_sample_indices
  from .local_stumps import make_stumps, tree_feature_transform
label_desc: Use image node_id 1 to create a new BlockPartitionedData object  with example: obj = BlockPartitionedData(data_blocks, common_block)