class_docstr: ColumnSelectorND wraps a ColumnSelector2D by as many ForEach step as needed to select the last dimension.
  n_dimension must therefore be greater or equal to 2.
class_docstr_tok: ["ColumnSelectorND","wraps","a","ColumnSelector2D","by","as","many","ForEach","step","as","needed","to","select","the","last","dimension",".","n_dimension","must","therefore","be","greater","or","equal","to","2","."]
code: def __init__(self, columns_selection, n_dimension=2):
      assert n_dimension >= 2
      col_selector: ColumnSelector2D = ColumnSelector2D(
          columns_selection=columns_selection
      )
      for _ in range(max(0, n_dimension - 2)):
          col_selector = ForEach(col_selector)
  
      MetaStep.__init__(self, col_selector)
      self.n_dimension = n_dimension
  
imports: from operator import itemgetter
  from typing import List, Tuple, Union, Iterable
  import numpy
  from neuraxle.base import MetaStep, BaseTransformer
  from neuraxle.pipeline import Pipeline
  from neuraxle.steps.loop import ForEach
  from neuraxle.union import FeatureUnion
label_desc: Use image node_id 1 to create a new ColumnsSelectorND object from inherited base classes: MetaStep with example: obj = ColumnsSelectorND(columns_selection, n_dimension)