Anstatt geologische Modelle zu diskutieren, werden wir heute ein Beispiel für ihre Programmierung in der Jupyter Notebook-Umgebung in Python 3 und mit den Bibliotheken Pandas, NumPy, SciPy, XArray, Dask Distributed, Numba, VTK, PyVista und Matplotlib sehen. Dies ist ein ziemlich einfacher Laptop mit Unterstützung für Multithreading und der Möglichkeit, lokal und in einem Cluster für die Verarbeitung von Big Data, die verzögerte Berechnung und die visuelle 3D-Visualisierung der Ergebnisse ausgeführt zu werden. In der Tat habe ich versucht, eine ganze Reihe komplexer technischer Konzepte zusammenzustellen und sie einfach zu halten. Informationen zum Erstellen eines Clusters in Amazon AWS finden Sie im AWS Init-Skript für die Jupyter Python GIS-Verarbeitung , um eine Reihe von Instanzen zu erstellen und den Ressourcenplaner sofort auf der Master-Instanz auszuführen.
Visualisierung mit dem Visualization Toolkit (VTK) und PyVista ist nicht mehr Matplotlib
, , , , ( ) . -, Python , . , , , , . , , , — , . — ( ) , , , . , Python , . , . PyVista VTK — Visualization Toolkit, … , ParaView N-Cube ParaView plugin for 3D/4D GIS Data Visualization, Python + VTK.
GitHub basic.ipynb , , . dask , . AWS Init script for Jupyter Python GIS processing . NumPy, , , , XArray NumPy (object.values). NumPy , Numba (, 15%):
from numba import jit
@jit(nopython=True, parallel=True)
def delta_grav_vertical(delta_mass, x, y, z):
G=6.67408*1e-11
return -np.sum((100.*1000)*G*delta_mass*z/np.power(x**2 + y**2 + z**2, 1.5))
(, , ) :
def forward_gravity(da):
(da_y, da_x, da_z) = xr.broadcast(da.y, da.x, da.z)
deltagrav = lambda x0, y0: delta_grav_vertical(da.values.ravel(), (da_x.values.ravel()-x0), (da_y.values.ravel()-y0), (da_z.values.ravel()-0))
gravity = xr.apply_ufunc(deltagrav, da_x.isel(z=0).chunk(50), da_y.isel(z=0).chunk(50), vectorize=True, dask='parallelized')
...
xarray.broadcast ravel() x, y, z . da_x.isel(z=0) da_y.isel(z=0) x, y , (, , .. ). xarray.apply_ufunc() dask deltagrav. , XArray , dask dask , da_x.isel(z=0).chunk(50) da_y.isel(z=0).chunk(50), 50 x, y ( ). , — chunk() XArray , dask .
, dask- (), forward_gravity() , , load(). , , . , NetCDF — , . , . , dask , "".
. . , ( ), . , . ( ).
Abschließend lade ich alle ein, die GitHub-Repositories mit einer Vielzahl von geologischen Modellen und deren Visualisierung in Blender und ParaView sowie Beispielen für verschiedene Analysen zu besuchen . Siehe auch vorgefertigte Visualisierungen auf dem YouTube-Kanal .