this is an experiemental method to help speed up independent draws
        for a really large (>1E6) ensemble sizes.

        Parameters
        ----------
        pst : pyemu.Pst
            a control file instance
        num_reals : int
            number of realizations to draw

        Returns
        -------
            ObservationEnsemble : ObservationEnsemble

def from_id_gaussian_draw(cls,pst,num_reals):
        """ this is an experiemental method to help speed up independent draws
        for a really large (>1E6) ensemble sizes.

        Parameters
        ----------
        pst : pyemu.Pst
            a control file instance
        num_reals : int
            number of realizations to draw

        Returns
        -------
            ObservationEnsemble : ObservationEnsemble

        """
        # set up some column names
        real_names = np.arange(num_reals,dtype=np.int64)
        #arr = np.empty((num_reals,len(pst.obs_names)))
        obs = pst.observation_data
        stds = {name:1.0/obs.loc[name,"weight"] for name in pst.nnz_obs_names}
        nz_names = set(pst.nnz_obs_names)
        arr = np.random.randn(num_reals,pst.nobs)
        for i,oname in enumerate(pst.obs_names):
            if oname in nz_names:
                arr[:,i] *= stds[oname]
            else:
                arr[:,i] = 0.0
        df = pd.DataFrame(arr,index=real_names,columns=pst.obs_names)
        df.loc[:,pst.obs_names] += pst.observation_data.obsval
        new_oe = cls.from_dataframe(pst=pst,df=df)
        return new_oe