calculate the approximate covariance matrix implied by the ensemble using
        mean-differencing operation at the core of EnKF

        Parameters
        ----------
            localizer : pyemu.Matrix
                covariance localizer to apply

        Returns
        -------
            cov : pyemu.Cov
                covariance matrix

def covariance_matrix(self,localizer=None):
        """calculate the approximate covariance matrix implied by the ensemble using
        mean-differencing operation at the core of EnKF

        Parameters
        ----------
            localizer : pyemu.Matrix
                covariance localizer to apply

        Returns
        -------
            cov : pyemu.Cov
                covariance matrix

        """




        mean = np.array(self.mean(axis=0))
        delta = self.as_pyemu_matrix(typ=Cov)
        for i in range(self.shape[0]):
            delta.x[i, :] -= mean
        delta *= (1.0 / np.sqrt(float(self.shape[0] - 1.0)))

        if localizer is not None:
            delta = delta.T * delta
            return delta.hadamard_product(localizer)

        return delta.T * delta