returns the values of column x
            in an n-dimensional array, each
            dimension being the values from
            a dimension in *args

            at the moment very slow due to generate :/

def table(self,x,*args,**kwargs):
        """
            returns the values of column x
            in an n-dimensional array, each
            dimension being the values from
            a dimension in *args

            at the moment very slow due to generate :/
        """
        reduce_func = kwargs.get('reduce',lambda x: x)
        data = []
        for i,d in enumerate(self.generate(*args)):
            if len(d) > 0:
                data.append(reduce_func(d[x]))
            else:
                data.append(0)
        try:
            return np.reshape(data,[len(self.space(a)) for a in args])
        except:
            return np.reshape(data,[-1]+[len(self.space(a)) for a in args])