docs: def map_weights(self):
          """
          Reshaped weights for visualization.
  
          The weights are reshaped as
          (W.shape[0], prod(W.shape[1:-1]), W.shape[2]).
          This allows one to easily see patterns, even for hyper-dimensional
          soms.
  
          For one-dimensional SOMs, the returned array is of shape
          (W.shape[0], 1, W.shape[2])
  
          Returns
          -------
          w : numpy array
              A three-dimensional array containing the weights in a
              2D array for easy visualization.
  
          """
          first_dim = self.map_dimensions[0]
          if len(self.map_dimensions) != 1:
              second_dim = np.prod(self.map_dimensions[1:])
          else:
              second_dim = 1
  
          # Reshape to appropriate dimensions
          return self.weights.reshape((first_dim,
                                       second_dim,
                                       self.data_dimensionality))