def get_name(cls, features):
        """Retrieves the name of the action.

        Retrieve the name of the action using the action's description. In the case
        that all features are zero the action is considered a `no-op` action.

        Parameters
        ----------
        features : ndarray
            A feature array.

        Returns
        -------
        str :
            The name of the action.

        """
        features = np.asarray(features, dtype=cls.dtype)

        if cls.description is not None:
            for e, config in cls.description.iteritems():
                if np.asarray(config["value"]).shape != features.shape:
                    ValueError("Dimension mismatch: array 'config['value']' is vector of length %d,"
                               " but 'features' is a vector of length %d." % (np.asarray(config["value"]).shape[0],
                                                                              features.shape[0]))
                if config["value"] == features or config["value"] == "*":
                    return e

        if not features.any():
            return "no-op"

        return ""