【问题标题】:Average variable values across coordinates within NetCDF before importing into R as Raster Brick?在作为光栅砖导入 R 之前,NetCDF 内坐标的平均变量值?
【发布时间】:2023-03-29 14:18:01
【问题描述】:

在使用 R 将其转换为光栅砖之前,有没有办法使用 nco 在给定的纬度/经度坐标列表上对 NetCDF 文件中的值进行平均?此纬度/经度坐标列表表示一个非矩形区域。

现在,我有一个 .nc 文件,其中包含整个海洋一年的月度温度数据。我有一个描述我的研究区域的纬度/经度值列表。我想在我的纬度/经度列表中的所有坐标中提取每个月的温度平均值。到目前为止,我一直在尝试将 .nc 文件转换为 R 中的 Raster Brick 后执行此操作,但执行此操作需要太多内存。

因此,我想知道是否有一种方法可以在 bash 中使用 nco 代替。

谢谢!

【问题讨论】:

  • 您说的是,您在.nc 文件在R 中转换为Raster Brick 后一直在尝试执行此操作,但是执行该操作需要太多内存。 这表明你在 R 中做错了什么。你能显示一些代码吗?

标签: r raster netcdf nco cdo-climate


【解决方案1】:

我不确定我是否理解您的问题的意图。这些命令中的任何一个都应该为每个点提供全年的单一温度:

ncwa -a time in.nc out.nc

ncra in.nc out.nc

从全球海洋中提取列表中的特定点(并将它们存储在单个文件中,而不使用_FillValues 其他点)问题更大,如果您使用ncremap首先将您的全球海洋数据从(可能)矩形纬度经度格式转换为非结构化(即一维)数组,然后使用ncks -X 将点列表提取到单个紧凑文件中。 User Guide 提供了有关每个步骤的更多信息。

【讨论】:

    【解决方案2】:

    如果 lat lon 点是一个矩形区域(即 lon1-lon2 和 lat1-lat2),那么您可以提取它们,然后使用 CDO 以这种方式取空间平均值:

    cdo fldmean -sellonlatbox,lon1,lon2,lat1,lat2 in.nc out.nc 
    

    如果有问题的区域不是一个简单的“盒子”,那么您需要将最近的网格点提取到一个文件中,然后使用整体平均:

    for lonlat in $lonlatlist ; do
       lable=`echo $lonlat | sed  's/\//_/g' # replace / in output name
       cdo remapbil,$lonlat in.nc point_${lonlat}.nc
    done 
    cdo ensmean point_*.nc out.nc 
    

    其中 lonlat list 是字符串“lon=X/lat=Y”中的数组索引列表(或者您可以在 bash 中使用替代的仿二维数组 (How to declare 2D array in bash)

    此方法使用双线性插值来获取每个给定纬度的值(并且它们需要定期间隔以获得合理的答案,否则您会将平均值更多地加权到您的点更接近空间的一个区域)

    【讨论】:

      猜你喜欢
      • 2020-09-27
      • 2021-12-30
      • 1970-01-01
      • 2017-07-22
      • 2023-03-17
      • 2015-01-28
      • 2016-06-30
      • 2020-03-22
      相关资源
      最近更新 更多