Géologie et visualisation computationnelles: un exemple de notebook Python 3 Jupyter

Aujourd'hui, au lieu de discuter des modèles géologiques, nous verrons un exemple de leur programmation dans l'environnement Jupyter Notebook en Python 3 et avec les bibliothèques Pandas, NumPy, SciPy, XArray, Dask Distributed, Numba, VTK, PyVista, Matplotlib. Il s'agit d'un ordinateur portable assez simple avec un support pour le multithreading et la possibilité de s'exécuter localement et dans un cluster pour le traitement de Big Data, le calcul paresseux et la visualisation 3D visuelle des résultats. En effet, j'ai essayé de rassembler tout un tas de concepts techniques complexes et de les garder simples. Pour créer un cluster sur Amazon AWS, consultez le script AWS Init pour le traitement Jupyter Python GIS afin de créer un ensemble d'instances et d'exécuter le planificateur de ressources sur l'instance maître à la fois.



La visualisation avec le Visualization Toolkit (VTK) et PyVista n'est plus 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 , "".







. . , ( ), . , . ( ).







En conclusion, j'invite tout le monde à visiter les référentiels GitHub avec une variété de modèles géologiques et leur visualisation dans Blender et ParaView, ainsi que des exemples de diverses analyses. Voir également les visualisations prêtes à l'emploi sur la chaîne YouTube .








All Articles