In [1]:
import gstlearn as gl
import gstlearn.plot as gp
In [2]:
db = gl.DbGrid.create([50,50],[2,2])
mesh = gl.MeshETurbo([100,100])
proj = gl.ProjMatrix.create(db,mesh)
In [3]:
A = gl.TestInheritance()
A.setIproj(proj)
In [4]:
class SpecializedProj(gl.IProj):
def __init__(self,n):
super(SpecializedProj,self).__init__()
self.n = n
def mesh2point(self,inv,outv):
for i in range(inv.size):
outv[i] = inv[i]
def point2mesh(self,outv,inv):
for i in range(inv.size):
outv[i] = inv[i]
def getNApex(self):
return self.n
def getNPoint(self):
return self.n
In [5]:
newproj = SpecializedProj(12)
In [6]:
A.setIproj(newproj)
In [7]:
A.display()
Number of Apices: 12 Number of Points: 12
Inheritance of an ICloneable class.ΒΆ
Add a clone method as follows:
In [8]:
import numpy as np
class MyCov(gl.ACov):
def __init__(self,range):
super(MyCov,self).__init__()
self.range = np.copy(range)
#space is needed to compute the distance in _eval
self.space = gl.getDefaultSpace()
#Specify the number of variables
def getNVar(self):
return 1
#clone method
def clone(self):
return MyCov(self.range).__disown__()
# _eval method (which is pure virtual in ACov)
def _eval(self,p1,p2,ivar,jvar,mode):
dist = self.space.getDistance(p1,p2)
return np.exp(- dist/self.range)
In [9]:
cov = MyCov(0.2)
p1 = gl.SpacePoint([1.,1.])
p2 = gl.SpacePoint([.95,.95])
print(cov.isNoStat())
cov.evalCov(p1,p2)
False
Out[9]:
0.7021885013265594
In [10]:
db = gl.Db.createFillRandom(5,2,1)
grid = gl.DbGrid.create([100,100],[0.01,0.01])
model = gl.ModelGeneric()
model.setCov(cov)
modelgst = gl.Model.createFromParam(gl.ECov.EXPONENTIAL,range = cov.range,flagRange=False)
neigh = gl.NeighUnique()
In [11]:
gl.OptCustom.define("NotOptimSimpleCase",1) #Multithread version doesn't seem possible yet from custom covariances from outside.
gl.kriging(db,grid,model,neigh)
gl.OptCustom.define("NotOptimSimpleCase",0)
gl.kriging(db,grid,modelgst,neigh)
Out[11]:
0
Comparison of kriging with custom class and gstlearn class
In [12]:
print(np.round(np.max(np.abs(grid["*estim"] - grid["*estim.1"])),5))
0.0