Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_ordinary(self):
for trend_func in [None, trend]:
for Model in self.cov_models:
for dim in self.dims:
model = Model(
dim=dim,
var=5,
len_scale=10,
anis=[0.9, 0.8],
angles=[2, 1, 0.5],
)
ordinary = krige.Ordinary(
model, self.cond_pos[:dim], self.cond_val, trend_func
)
field_1, __ = ordinary.unstructured(self.grids[dim - 1])
field_1 = field_1.reshape(self.grid_shape[:dim])
field_2, __ = ordinary.structured(self.pos[:dim])
self.assertAlmostEqual(
np.max(np.abs(field_1 - field_2)), 0.0, places=2
)
for i, val in enumerate(self.cond_val):
self.assertAlmostEqual(
field_1[self.data_idx[:dim]][i], val, places=2
)
"""
if srf._value_type != "scalar":
raise ValueError("Conditioned SRF: only scalar fields allowed.")
krige_ok = Ordinary(
model=srf.model, cond_pos=srf.cond_pos, cond_val=srf.cond_val
)
krige_field, krige_var = krige_ok(srf.pos, srf.mesh_type)
# evaluate the field at the conditional points
x, y, z = pos2xyz(srf.cond_pos, max_dim=srf.model.dim)
if srf.model.do_rotation:
x, y, z = unrotate_mesh(srf.model.dim, srf.model.angles, x, y, z)
y, z = make_isotropic(srf.model.dim, srf.model.anis, y, z)
err_data = srf.generator.__call__(x, y, z, "unstructured")
err_ok = Ordinary(
model=srf.model, cond_pos=srf.cond_pos, cond_val=err_data
)
err_field, __ = err_ok(srf.pos, srf.mesh_type)
cond_field = srf.raw_field + krige_field - err_field
info = {"mean": krige_ok.mean}
return cond_field, krige_field, err_field, krige_var, info
The spatial random field class containing all information
Returns
-------
cond_field : :class:`numpy.ndarray`
the conditioned field
krige_field : :class:`numpy.ndarray`
the kriged field
err_field : :class:`numpy.ndarray`
the error field to set the given random field to zero at the conditions
krige_var : :class:`numpy.ndarray`
the variance of the kriged field
"""
if srf._value_type != "scalar":
raise ValueError("Conditioned SRF: only scalar fields allowed.")
krige_ok = Ordinary(
model=srf.model, cond_pos=srf.cond_pos, cond_val=srf.cond_val
)
krige_field, krige_var = krige_ok(srf.pos, srf.mesh_type)
# evaluate the field at the conditional points
x, y, z = pos2xyz(srf.cond_pos, max_dim=srf.model.dim)
if srf.model.do_rotation:
x, y, z = unrotate_mesh(srf.model.dim, srf.model.angles, x, y, z)
y, z = make_isotropic(srf.model.dim, srf.model.anis, y, z)
err_data = srf.generator.__call__(x, y, z, "unstructured")
err_ok = Ordinary(
model=srf.model, cond_pos=srf.cond_pos, cond_val=err_data
)
err_field, __ = err_ok(srf.pos, srf.mesh_type)
cond_field = srf.raw_field + krige_field - err_field
def trend(x):
"""Example for a simple linear trend."""
return x * 0.1 + 1
# synthetic condtions with trend/drift
drift_model = Gaussian(dim=1, var=0.1, len_scale=2)
drift = SRF(drift_model, seed=101)
cond_pos = np.linspace(0.1, 8, 10)
cond_val = drift(cond_pos) + trend(cond_pos)
# resulting grid
gridx = np.linspace(0.0, 15.0, 151)
drift_field = drift(gridx) + trend(gridx)
# kriging
model = Gaussian(dim=1, var=0.1, len_scale=2)
krig_trend = krige.Ordinary(model, cond_pos, cond_val, trend)
krig_trend(gridx)
ax = krig_trend.plot()
ax.scatter(cond_pos, cond_val, color="k", zorder=10, label="Conditions")
ax.plot(gridx, trend(gridx), ":", label="linear trend")
ax.plot(gridx, drift_field, "--", label="original field")
ax.legend()