def flatten_n(space, obs): if isinstance(space, gym.spaces.Box): obs = np.asarray(obs) return obs.reshape((obs.shape[0], -1)) elif isinstance(space, gym.spaces.Discrete): return special.to_onehot_n(obs, space.n) elif isinstance(space, gym.spaces.Tuple): obs_regrouped = [[obs[i] for o in obs] for i in range(len(obs[0]))] flat_regrouped = [ flatten_n(c, oi) for c, oi in zip(space.spaces, obs_regrouped) ] return np.concatenate(flat_regrouped, axis=-1) else: raise NotImplementedError
def flatten_n(self, x): return special.to_onehot_n(x, self.n)