如何迭代 xarray 数据集中的特定维度,然后导出为 netcdf?

问题描述 投票:0回答:0

我正在使用具有四个维度(lon、lat、lev、time)和几个变量的 xarray 数据集,这些变量保存有关空气污染物浓度的信息(例如,数据变量 CO 具有某些时刻的 CO 浓度(时间、lev、纬度、经度)时间和地点)。见下文:

<xarray.Dataset>
Dimensions:            (lon: 1440, lat: 721, lev: 1, time: 2160)
Coordinates:
  * lon                (lon) float64 -180.0 -179.8 -179.5 ... 179.2 179.5 179.8
  * lat                (lat) float64 -90.0 -89.75 -89.5 ... 89.5 89.75 90.0
  * lev                (lev) float64 72.0
  * time               (time) datetime64[ns] 2018-01-01T00:30:00 ... 2018-01-...
Data variables:
    CO                 (time, lev, lat, lon) float32 dask.array<chunksize=(1, 1, 721, 1440), meta=np.ndarray>
    NO2                (time, lev, lat, lon) float32 dask.array<chunksize=(1, 1, 721, 1440), meta=np.ndarray>

我正在尝试做两件事:

  1. 迭代此数据集的时间维度并在每个时间步访问特定变量 NO2。此变量包含一组浮点数,在单个时间步长中具有 (1, 1, 721, 1440) for (time, lev, lat, long)。我想确定该时间步长内所有 NO2 值的平均值和标准偏差,然后对每个 NO2 值应用归一化公式,更改值。然后我想移动到下一个时间步并重复这个过程。

  2. 适当修改所有 NO2 值后,我想将数据集导出为 .nc 文件。

起初,我用一个数组来保存规范化的值(见下面的代码片段):

norm_NO2 = []

for i in range(0, timesteps - 1):
    NO2 = data['NO2'].isel(time=i).compute().data.flatten()
    timestep_mean = np.mean(NO2)
    timestep_SD = np.std(NO2)
    timestep_normalized = (1 / timestep_SD) * (np.log(NO2 + 10 ** -32)) - timestep_mean
    norm_NO2.append(timestep_normalized)

但是,我无法找到将数组转换为 .nc 文件的方法(通过转换数组 -> 数据集 -> .nc,或数组 -> .nc)。

我还尝试迭代数据集本身:

for time in data.transpose("time", ...):

作为我的循环,但在这方面并没有走得太远。

我非常感谢对这些(或单独的)方法中的任何一个的一些指导!只要我在每个时间步标准化 NO2 值并导出为 .nc,一切都有效。我是使用 xarray 的新手,在文档中找不到任何可以回答这个特定问题的内容,所以我一直在努力确定解决这个问题的最佳方法。

python dataset python-xarray
© www.soinside.com 2019 - 2024. All rights reserved.