【发布时间】:2014-11-02 02:15:12
【问题描述】:
假设您有一个文件example.nc,其中定义了 90N、90S、180E、180W 区域的风数据。无论如何我可以在 linux 中使用简单的 nc 类型命令(无需在 matlab/python 中提取数据进行重写),裁剪此文件以包含一个较小的区域,即上述的子集。
例如,30N、10S、60E 和 30W。
【问题讨论】:
标签: linux netcdf nco cdo-climate
假设您有一个文件example.nc,其中定义了 90N、90S、180E、180W 区域的风数据。无论如何我可以在 linux 中使用简单的 nc 类型命令(无需在 matlab/python 中提取数据进行重写),裁剪此文件以包含一个较小的区域,即上述的子集。
例如,30N、10S、60E 和 30W。
【问题讨论】:
标签: linux netcdf nco cdo-climate
是的,使用 NCO 包中的 ncks:http://nco.sourceforge.net/nco.html
如果您知道与所需纬度/经度范围相对应的索引,例如,假设它们是纬度 30-40 和经度 25-50,那么您可以裁剪 netCDF 文件
ncks -d lat,30,40 -d lon,25,50 example.nc -O cropped_example.nc
确保您使用整数值指定索引。
否则,您也可以直接指定所需的经纬度值的范围,但在这种情况下,您必须确保使用小数点将范围作为浮点数传递。
ncks -d lat,30.,-10. -d lon,-30.,60. example.nc -O cropped_example.nc
【讨论】:
ncks -d lat,30.,40. -d lon,25.,50. example.nc -O cropped_example.nc。
nco 工作正常,但只是列出一个替代方案,也可以使用cdo(气候数据运算符)来完成,我发现它更容易记住。您可以通过这种方式直接指定经度和纬度值:
cdo sellonlatbox,lon1,lon2,lat1,lat2 infile.nc outfile.nc
其中 lon1,lon2,lat1,lat2 定义了您需要的区域的边界。
有关提取子区域的更多详细信息,我已发布this video tutorial on youtube
如果您还没有安装 cdo,您可以在 Ubuntu 上使用
sudo apt-get install cdo
cdo 具有许多其他用于处理、合并和拆分文件的功能以及出色的在线文档。请注意,要使cdo 工作,需要根据 CF 约定定义坐标变量(纬度/经度),因此在这样nco 解决方案就更健壮了(参见 cmets)。
【讨论】:
如果您使用的是 Linux 或 macOS,则可以在 Python 上使用 nctoolkit (https://nctoolkit.readthedocs.io/en/latest/) 轻松完成此操作。
import nctoolkit as nc
data = nc.open_data("example.nc")
data.crop(lon = [25, 50], lat = [30, 40])
data.to_nc("output.nc")
在底层,nctoolkit 使用 CDO。所以上面就相当于上面提到的CDO方式了:
cdo sellonlatbox,lon1,lon2,lat1,lat2 infile.nc outfile.nc
【讨论】: