예제 #1
0
 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)))
예제 #2
0
 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)
예제 #3
0
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]