def test_grid_generation(self): pos1 = [self.x_grid, self.y_grid, self.z_grid] pos2 = gs.generate_grid(pos1) time = np.arange(10) grid1 = gs.generate_grid(pos1 + [time]) grid2 = gs.generate_st_grid(pos1, time, mesh_type="structured") grid3 = gs.generate_st_grid(pos2, time, mesh_type="unstructured") self.assertTrue(np.all(np.isclose(grid1, grid2))) self.assertTrue(np.all(np.isclose(grid1, grid3))) self.assertTrue(np.all(np.isclose(grid2, grid3)))
def test_auto_fit(self): x = y = range(60) pos = gs.generate_grid([x, y]) model = gs.Gaussian(dim=2, var=1, len_scale=10) srf = gs.SRF(model, seed=20170519, normalizer=gs.normalizer.LogNormal()) srf(pos) ids = np.arange(srf.field.size) samples = np.random.RandomState(20210201).choice(ids, size=60, replace=False) # sample conditioning points from generated field cond_pos = pos[:, samples] cond_val = srf.field[samples] krige = gs.krige.Ordinary( model=gs.Stable(dim=2), cond_pos=cond_pos, cond_val=cond_val, normalizer=gs.normalizer.BoxCox(), fit_normalizer=True, fit_variogram=True, ) # test fitting during kriging self.assertTrue(np.abs(krige.normalizer.lmbda - 0.0) < 1e-1) self.assertAlmostEqual(krige.model.len_scale, 10.2677, places=4) self.assertAlmostEqual( krige.model.sill, krige.normalizer.normalize(cond_val).var(), places=4, ) # test fitting during vario estimate bin_center, gamma, normalizer = gs.vario_estimate( cond_pos, cond_val, normalizer=gs.normalizer.BoxCox, fit_normalizer=True, ) model = gs.Stable(dim=2) model.fit_variogram(bin_center, gamma) self.assertAlmostEqual(model.var, 0.6426670183, places=4) self.assertAlmostEqual(model.len_scale, 9.635193952, places=4) self.assertAlmostEqual(model.nugget, 0.001617908408, places=4) self.assertAlmostEqual(model.alpha, 2.0, places=4)
the field variance. Artificial data ^^^^^^^^^^^^^^^ Here we generate log-normal data following a Gaussian covariance model. We will generate the "original" field on a 60x60 mesh, from which we will take samples in order to pretend a situation of data-scarcity. """ import numpy as np import gstools as gs import matplotlib.pyplot as plt # structured field with edge length of 50 x = y = range(51) pos = gs.generate_grid([x, y]) model = gs.Gaussian(dim=2, var=1, len_scale=10) srf = gs.SRF(model, seed=20170519, normalizer=gs.normalizer.LogNormal()) # generate the original field srf(pos) ############################################################################### # Here, we sample 60 points and set the conditioning points and values. ids = np.arange(srf.field.size) samples = np.random.RandomState(20210201).choice(ids, size=60, replace=False) # sample conditioning points from generated field cond_pos = pos[:, samples] cond_val = srf.field[samples]