【问题标题】:Use xarray to get sums in time for each point in a grid使用 xarray 及时获取网格中每个点的总和
【发布时间】:2017-09-09 20:14:58
【问题描述】:

我有一个具有三个维度的网格数据集:纬度、经度和时间。

<xarray.Dataset>
Dimensions:      (lat: 185, lon: 155, time: 8760)
Coordinates:
  * lon          (lon) float64 -76.98 -76.92 -76.86 -76.8 -76.74 ...
  * lat          (lat) float64 33.55 33.6 33.66 33.71 33.76 33.82 ...
  * time         (time) datetime64[ns] 2010-01-01 2010-01 01T01:00:00.028800 ...
Data variables:
    u            (time, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    v            (time, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    u_err        (time, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    v_err        (time, lat, lon) float64 nan nan nan nan nan nan nan nan ...

我想通过时间获得所有 u 和 v 的平均值,我可以通过以下方式做到这一点:

ds_seasonal = ds.groupby('time.season').mean('time')

但是,我只想获取每个网格点的数据集平均值,其中数据存在 50% 或更多时间。

在 MATLAB 中,我会将所有内容放入一个结构化数组中,它就像 nans=sum(~isnan(u),3); 一样简单,然后我会将其与 4335 或 50% 的时间维度进行比较。

我只是在学习如何使用 xarray 进行计算。 xarray 可以吗?

【问题讨论】:

    标签: python-xarray


    【解决方案1】:

    where 是在 xarray 中屏蔽值的方法。您可以使用它来编写带有groupby.apply() 的自定义聚合函数,例如,

    def custom_mean(ds):
        missing_frac = result.isnull().mean('time')
        return result.mean('time').where(missing_frac < 0.5)
    
    result = ds.groupby('time.season').apply(custom_mean)
    

    【讨论】:

      猜你喜欢
      • 2020-10-23
      • 2021-01-30
      • 1970-01-01
      • 2021-02-18
      • 2017-07-31
      • 2010-10-21
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      相关资源
      最近更新 更多