def test_ordinary(self): for Model in self.cov_models: model = Model(dim=1, var=0.5, len_scale=2, anis=[0.1, 1], angles=[0.5, 0, 0]) srf = SRF(model, seed=19970221) srf.set_condition(self.cond_pos[0], self.cond_val, "ordinary") field_1 = srf.unstructured(self.pos[0]) field_2 = srf.structured(self.pos[0]) for i, val in enumerate(self.cond_val): self.assertAlmostEqual(val, field_1[i], places=2) self.assertAlmostEqual(val, field_2[(i, )], places=2) for dim in self.dims[1:]: model = Model( dim=dim, var=0.5, len_scale=2, anis=[0.1, 1], angles=[0.5, 0, 0], ) srf = SRF(model, seed=19970221) srf.set_condition(self.cond_pos[:dim], self.cond_val, "ordinary") field_1 = srf.unstructured(self.pos[:dim]) field_2 = srf.structured(self.pos[:dim]) for i, val in enumerate(self.cond_val): self.assertAlmostEqual(val, field_1[i], places=2) self.assertAlmostEqual(val, field_2[dim * (i, )], places=2)
import numpy as np from gstools import Gaussian, SRF import matplotlib.pyplot as plt # condtions cond_pos = [0.3, 1.9, 1.1, 3.3, 4.7] cond_val = [0.47, 0.56, 0.74, 1.47, 1.74] gridx = np.linspace(0.0, 15.0, 151) # spatial random field class model = Gaussian(dim=1, var=0.5, len_scale=2) srf = SRF(model) srf.set_condition(cond_pos, cond_val, "ordinary") fields = [] for i in range(100): if i % 10 == 0: print(i) fields.append(srf(gridx, seed=i)) label = "Conditioned ensemble" if i == 0 else None plt.plot(gridx, fields[i], color="k", alpha=0.1, label=label) plt.plot(gridx, np.full_like(gridx, srf.mean), label="estimated mean") plt.plot(gridx, np.mean(fields, axis=0), linestyle=":", label="Ensemble mean") plt.plot(gridx, srf.krige_field, linestyle="dashed", label="kriged field") plt.scatter(cond_pos, cond_val, color="k", zorder=10, label="Conditions") plt.legend() plt.show()