【问题标题】:How to return the season of each yearly maximum value is in?如何返回每个年度最大值所在的季节?
【发布时间】:2021-12-25 09:00:06
【问题描述】:

我有一个每日 netcdf 数据集。我想获取每年的最大值,并返回最大值所在的季节。

我试过xarray.DataArray.idxmax,下面是例子,它可以返回一个维度上最大值的坐标标签。

在:

import xarray as xr

array = xr.DataArray(
        [
            [2.0, 1.0, 2.0, 0.0, -2.0],
            [-4.0, np.NaN, 2.0, np.NaN, -2.0],
            [np.NaN, np.NaN, 1.0, np.NaN, np.NaN],
        ],
        dims=["y", "x"],
        coords={"y": [-1, 0, 1], "x": np.arange(5.0) ** 2},
    )
array.max(dim="x")

输出:

<xarray.DataArray (y: 3)>
array([2., 2., 1.])
    Coordinates:
      * y        (y) int64 -1 0 1

在:

array.argmax(dim="x")

输出:

<xarray.DataArray (y: 3)>
array([0, 2, 2])
    Coordinates:
      * y        (y) int64 -1 0 1

我知道 xarray.DataArray.idxmax 可以返回所有年份的日期。但我不能把这一天变成每年的季节。 对我来说最难熬的就是冬天,因为冬天就在两年之间。

我怎样才能做到这一点?

【问题讨论】:

    标签: python python-xarray cdo-climate


    【解决方案1】:

    你用cdo标记了这个问题,第一部分的cdo答案相当简单,获得一年中的最大值只是

    cdo yearmax in.nc out.nc 
    

    这是您问题的第一部分。但就它发生的季节而言,你如何定义你的季节? DJF、MAM、JJA 和 SON?你能在你的问题中澄清这一点吗?或者知道月份是否足够(甚至日期本身?)。

    假设这是 CDO 定义的这些标准季节,那么您可以尝试沿着这些路线尝试一些方法,在最大值以下的所有天数中设置零掩码,1=最大值天。然后你做一个季节性总和,然后再次屏蔽非零季节......但是这种方法需要你使用 yearsplit 将文件分成年份:

    # split the files into years, year2010.nc year2011.nc 
    cdo splityear t2m_daymean.nc year
    
    # loop over the years, 
    for y in $(seq 2010 2020) ; do 
      # 1 for day of max and 0 otherwise
      cdo gec,0 -sub year${y}.nc -yearmax year${y}.nc mask${y}.nc 
      # Now do the seasonal sum, will be >0 for seasonal with max,
      # then convert this to 1, 0 otherwise
      cdo -gt,0 -seassum mask${y}.nc seas_max${y}.nc
    done 
    

    现在 seas_max2010 等文件将有 4 个季节的 4 个时间片,日期如下:2019-01-30 2019-04-15 2019-07-16 2019-10-16 和 0 为所有季节,除了一个最大...

    如果需要,您可以使用 cdo mergecdo mergetime 将文件重新合并在一起。

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多