code: def invert_projection(self, X, identities):
          
          distances = self.transform(X)
  
          if len(distances) != len(identities):
              raise ValueError("X and identities are not the same length: "
                               "{0} and {1}".format(len(X), len(identities)))
  
          node_match = []
  
          for d in distances.__getattribute__(self.argfunc)(0):
              node_match.append(identities[d])
  
          return np.array(node_match)
docs: Calculate the inverted projection.
  
          The inverted projectio of a SOM is created by association each weight
          with the input which matches it the most, thus giving a good
          approximation of the "influence" of each input item.
  
          Works best for symbolic (instead of continuous) input data.
  
          Parameters
          ----------
          X : numpy array
              Input data
          identities : list
              A list of names for each of the input data. Must be the same
              length as X.
  
          Returns
          -------
          m : numpy array
              An array with the same shape as the map