使用 xarray 获取网格中每个点的时间总和
Use xarray to get sums in time for each point in a grid
我有一个包含三个维度的网格化数据集:纬度、经度和时间。
<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 实现吗?
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)
我有一个包含三个维度的网格化数据集:纬度、经度和时间。
<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 实现吗?
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)