InterpolationsΒΆ

This Tutorial is meant to give some hints about using Interpolation methods in gstlearn

In [1]:
import numpy as np
import pandas as pd
import sys
import os
import gstlearn as gl
import gstlearn.plot as gp
import matplotlib.pyplot as plt

Setting some global variables

In [2]:
# Set the Global Options
verbose = True
flagGraphic = True

# Define the Space Dimension
ndim = 2
gl.defineDefaultSpace(gl.ESpaceType.RN, ndim)

# Set the Seed for the Random Number generator
gl.law_set_random_seed(32131)

Generating an initial square grid covering a 1 by 1 surface (100 meshes along each direction).

In [3]:
grid = gl.DbGrid.create([100,100], [0.01,0.01])

Creating a Data Set. The set is generated using a non-conditional geostatistical simulation (performed using the Turning Bands method). This simulation is first performed on the grid which is then sampled to constitute the Point Data Set.

In [4]:
model = gl.Model.createFromParam(gl.ECov.EXPONENTIAL, 0.1, 1.)
gl.simtub(None, grid, model)
if verbose:
    grid.display()
    
np = 100
data = gl.Db.createSamplingDb(grid, 0., np, ["x1","x2","Simu"])
if verbose:
    data.display()
Data Base Grid Characteristics
==============================

Data Base Summary
-----------------
File is organized as a regular grid
Space dimension              = 2
Number of Columns            = 4
Total number of samples      = 10000

Grid characteristics:
---------------------
Origin :      0.000     0.000
Mesh   :      0.010     0.010
Number :        100       100

Variables
---------
Column = 0 - Name = rank - Locator = NA
Column = 1 - Name = x1 - Locator = x1
Column = 2 - Name = x2 - Locator = x2
Column = 3 - Name = Simu - Locator = z1
 
Data Base Characteristics
=========================

Data Base Summary
-----------------
File is organized as a set of isolated points
Space dimension              = 2
Number of Columns            = 4
Total number of samples      = 100

Variables
---------
Column = 0 - Name = rank - Locator = NA
Column = 1 - Name = x1 - Locator = x1
Column = 2 - Name = x2 - Locator = x2
Column = 3 - Name = Simu - Locator = z1
 
In [5]:
if flagGraphic:
    ax = data.plot()
    ax.decoration(title="Data Set")
    ax.geometry(xlim=[0,1],ylim=[0,1])
No description has been provided for this image

Interpolation using Moving Average techniqueΒΆ

In this paragraph, we experiment an interpolation based on Moving average technique. We need to define a Moving Neighborhood first

In [6]:
nmini = 5
nmaxi = 5
radius = 0.2
neigh = gl.NeighMoving.create(False, nmaxi, radius, nmini)
neigh.display()
Moving Neighborhood
===================
Minimum number of samples           = 5
Maximum number of samples           = 5
Maximum horizontal distance         = 0.2
 
In [7]:
gl.movingAverage(data, grid, neigh)
if verbose:
    grid.display()
Data Base Grid Characteristics
==============================

Data Base Summary
-----------------
File is organized as a regular grid
Space dimension              = 2
Number of Columns            = 5
Total number of samples      = 10000

Grid characteristics:
---------------------
Origin :      0.000     0.000
Mesh   :      0.010     0.010
Number :        100       100

Variables
---------
Column = 0 - Name = rank - Locator = NA
Column = 1 - Name = x1 - Locator = x1
Column = 2 - Name = x2 - Locator = x2
Column = 3 - Name = Simu - Locator = NA
Column = 4 - Name = MovAve.Simu.estim - Locator = z1
 
In [8]:
if flagGraphic:
    ax = grid.plot()
    ax.decoration(title="Moving Average")
No description has been provided for this image

Interpolation using Inverse Distance techniqueΒΆ

In this paragraph, we experiment an interpolation based on Inverse Distance technique. We use the squared distance weighting function (default option).

In [9]:
gl.inverseDistance(data, grid)
if verbose:
    grid.display()
Data Base Grid Characteristics
==============================

Data Base Summary
-----------------
File is organized as a regular grid
Space dimension              = 2
Number of Columns            = 6
Total number of samples      = 10000

Grid characteristics:
---------------------
Origin :      0.000     0.000
Mesh   :      0.010     0.010
Number :        100       100

Variables
---------
Column = 0 - Name = rank - Locator = NA
Column = 1 - Name = x1 - Locator = x1
Column = 2 - Name = x2 - Locator = x2
Column = 3 - Name = Simu - Locator = NA
Column = 4 - Name = MovAve.Simu.estim - Locator = NA
Column = 5 - Name = InvDist.Simu.estim - Locator = z1
 
In [10]:
if flagGraphic:
    ax = grid.plot()
    ax.decoration(title="Inverse Squared Distance")
No description has been provided for this image

Least Square Polynomial FitΒΆ

In this paragraph, we experiment an interpolation based on Least Square Polynomial Fit technique. We use a polynomial of degree 1, fitted locally (on the samples neighboring the target grid node). Note that a bigger neighborhood had to be defined (more than 5 samples per neighborhood)

In [11]:
nmini = 5
nmaxi = 10
radius = 0.5
neigh = gl.NeighMoving.create(False, nmaxi, radius, nmini)
neigh.display()
Moving Neighborhood
===================
Minimum number of samples           = 5
Maximum number of samples           = 10
Maximum horizontal distance         = 0.5
 
In [12]:
gl.leastSquares(data, grid, neigh, 1)
if verbose:
    grid.display()
Data Base Grid Characteristics
==============================

Data Base Summary
-----------------
File is organized as a regular grid
Space dimension              = 2
Number of Columns            = 7
Total number of samples      = 10000

Grid characteristics:
---------------------
Origin :      0.000     0.000
Mesh   :      0.010     0.010
Number :        100       100

Variables
---------
Column = 0 - Name = rank - Locator = NA
Column = 1 - Name = x1 - Locator = x1
Column = 2 - Name = x2 - Locator = x2
Column = 3 - Name = Simu - Locator = NA
Column = 4 - Name = MovAve.Simu.estim - Locator = NA
Column = 5 - Name = InvDist.Simu.estim - Locator = NA
Column = 6 - Name = LstSqr.Simu.estim - Locator = z1
 
In [13]:
if flagGraphic:
    ax = grid.plot()
    ax.decoration(title="Least Squares Polynomial Fit")
No description has been provided for this image
In [ ]: