工具推荐|pyinterp-面向地球科学领域的插值工具

2022-09-23 13:44:26 浏览数 (1)

此项目的动机是为地球科学领域提供插值工具。当然也有其它库可应用于地球科学的数据插值,但是这些库基本完全是用Python编写,其性能无法满足需求。

利用此库你可以使用 n-variatebicubic插值方法和非结构网格进行 2D、3D和4D插值。

安装

可以通过如下三种方式安装:

通过 pip 安装,但安装前需要确保所需要的C 等依赖库已经安装

代码语言:javascript复制
pip install pyinterp

通过 conda 安装

代码语言:javascript复制
conda install pyinterp -c conda-forge

通过源码安装

推荐使用 conda 进行安装,会解决依赖问题。

示例

以下是一些官方提供的示例:

2D插值

代码语言:javascript复制
import os
import pathlib
import cartopy.crs
import matplotlib
import matplotlib.pyplot
import numpy
import pyinterp
import pyinterp.backends.xarray
import xarray

try:
    # When generating the documentation the variable DATASET points to the data
    # path.
    DATASET = pathlib.Path(os.environ['DATASET'])
except KeyError:
    # Otherwise, the relative folder path is used.
    DATASET = pathlib.Path("..", "..", "tests", "dataset")
MSS = DATASET.joinpath("mss.nc")

ds = xarray.open_dataset(MSS)
interpolator = pyinterp.backends.xarray.Grid2D(ds.mss)

mx, my = numpy.meshgrid(numpy.arange(-180, 180, 1)   1 / 3.0,
                        numpy.arange(-89, 89, 1)   1 / 3.0,
                        indexing='ij')
                        
mss = interpolator.bivariate(
    coords=dict(lon=mx.flatten(), lat=my.flatten())).reshape(mx.shape)                    
fig = matplotlib.pyplot.figure(figsize=(10, 8))
ax1 = fig.add_subplot(
    211, projection=cartopy.crs.PlateCarree(central_longitude=180))
lons, lats = numpy.meshgrid(ds.lon, ds.lat, indexing='ij')
pcm = ax1.pcolormesh(lons,
                     lats,
                     ds.mss.T,
                     cmap='jet',
                     transform=cartopy.crs.PlateCarree(),
                     vmin=-0.1,
                     vmax=0.1)
ax1.coastlines()
ax1.set_title("Original MSS")
ax2 = fig.add_subplot(212, projection=cartopy.crs.PlateCarree())
pcm = ax2.pcolormesh(mx,
                     my,
                     mss,
                     cmap='jet',
                     transform=cartopy.crs.PlateCarree(),
                     vmin=-0.1,
                     vmax=0.1)
ax2.coastlines()
ax2.set_title("Bilinear Interpolated MSS")
fig.colorbar(pcm, ax=[ax1, ax2], shrink=0.8)
fig.show()

二维常规网格的 bivariate 插值

上例仅是官方提供的一个示例,此外,官方文档提供了更多的示例,具体可以前往官方文档查看更详细的示例。

官方示例文档

扫描二维码前往官方文档

—END—

0 人点赞