<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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))