python - 了解 pyresample 以将不规则网格数据重新网格化为规则网格

标签 python netcdf netcdf4 pyresample

我需要将不规则网格(朗伯圆锥形)上的数据重新网格化为规则网格。我认为 pyresample 是我最好的选择。事实上,我原来的经纬度不是一维的(似乎需要使用 basemap.interp 或 scipy.interpolate.griddata)。

我找到了 this SO's answer有帮助。但是我得到空的插值数据。我认为这与我的影响半径的选择以及我的数据被包装的事实有关(??)。

这是我的代码:

import numpy as np
from matplotlib import pyplot as plt
import netCDF4
%matplotlib inline
url = "http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/NARR/Dailies/monolevel/hlcy.2009.nc"
SRHtemp = netCDF4.Dataset(url).variables['hlcy'][0,::]
Y_n     = netCDF4.Dataset(url).variables['y'][:]
X_n     = netCDF4.Dataset(url).variables['x'][:]
T_n     = netCDF4.Dataset(url).variables['time'][:]

lat_n     = netCDF4.Dataset(url).variables['lat'][:]
lon_n     = netCDF4.Dataset(url).variables['lon'][:]

lat_n和lon_n是不规则的,经纬度对应投影坐标x,y。

由于lon_n的方式,我补充说:

lon_n[lon_n<0] = lon_n[lon_n<0]+360

所以现在如果我绘制它们,它们看起来很不错:

enter image description here

然后我创建了一组新的常规坐标:

XI = np.arange(148,360)
YI = np.arange(0,87)
XI, YI = np.meshgrid(XI,YI)

按照上面的回答我写了下面的代码:

从 pyresample.geometry 导入 SwathDefinition 从 pyresample.kd_tree 导入 resample_nearest

def_a = SwathDefinition(lons=XI, lats=YI)
def_b = SwathDefinition(lons=lon_n, lats=lat_n)
interp_dat = resample_nearest(def_b,SRHtemp,def_a,radius_of_influence = 70000,fill_value = -9.96921e+36)

数据的分辨率大约是30km,所以我放了70km,我放的fill_value是数据中的那个,当然我可以只放0或者nan。

但是我得到一个空数组。

我做错了什么?另外-如果有另一种方法,我很想知道。 Pyresample 文档有点薄,我需要更多帮助。

我确实找到了 this answer建议使用另一个 griddata 函数:

import matplotlib.mlab as ml
resampled_data = ml.griddata(lon_n.ravel(), lat_n.ravel(),SRHtemp.ravel(),XI,YI,interp = "linear")

看起来没问题:

enter image description here

但是我想更多地了解pyresample,因为它看起来很强大。

最佳答案

问题是 XI 和 XI 是整数,而不是 float 。你可以通过简单地做来解决这个问题

XI = np.arange(148,360.)
YI = np.arange(0,87.)
XI, YI = np.meshgrid(XI,YI)

无法处理整数数据类型是 pyresample 的一种未记录、不直观且可能有错误的行为。

关于您的编码风格的更多注意事项:

  • 没有必要覆盖 XI 和 YI 变量,这样做不会有太大好处
  • 您应该只加载一次 netCDF 数据集,然后通过该对象访问变量

关于python - 了解 pyresample 以将不规则网格数据重新网格化为规则网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39475003/

相关文章:

python - 从另一个函数调用一个函数时在 pycassaShell 中出现意外的 NameError

linux - 当我在 Linux 上编译时在 bash 中设置 tenv

python - 如何在 Python 中使用 xarray 连接来自多个 netCDF 文件的数据?

python-3.x - 获取多维 xarray.DataArray 的 n 个最小值

python - 使用Python在netCDF4中使用scale_factor和add_offset的示例?

Java NetCDF : Aggregating Existing Files : time dimension not found issue

Python:在一个简单的字符串中获取最新的日期时间

python - 当它们在父级中更改时,如何访问从另一个模块继承的变量?

python - EOFError : EOF when reading a line only when execute it via curl 错误

python - h5py 不遵守分块规范?