如何在 xarray.DataArray.diff 之前添加一个值?

How to prepend a value before xarray.DataArray.diff?

给定 xarray.DataArray 沿日期和深度维度的面积值 ('Af'):xarray.DataArray 'Af' (time: 366, z: 20) ,我如何获得每个日期在深度维度上的每个区域之间的差异与 'area' 长度相同,第一个差值等于第一个索引 'area'?

所以像这样:

area_1 = Af_1

area_2 = Af_1 - Af_2

...

area_i = Af_i - Af_(i-1)

如果它是在 numpy 中,我可以使用 np.diff(array, prepend=array[0]),但是在 xarray 中没有前置选项。有什么方法可以在xarray中模仿np.diff(array, prepend=0)吗?

我是 xarray(和一般编码)的新手,所以任何帮助将不胜感激。

如果我对你的理解正确,你想要执行以下操作:

  1. 计算区域沿 z 维度的差异。这必然导致坐标比以前更短。
  2. 然后你想把第一个深度的区域放在前面以获得相同长度的数组。

你可以用xarray的diff方法做第一步,用concat做第二步。

import numpy as np
import xarray as xr

# Create a dummy dataset
da = xr.DataArray(
    data=np.random.rand(3, 4),
    dims=("time", "z"),
    name="area",
    coords={"time": np.arange(3), "z": np.arange(4)},
)

# Compute the differences
differences = da.diff(dim="z", label="upper")
# Concatenate the differences with the areas at the first depth
xr.concat([da.isel(z=0), differences], dim="z")

我认为这是最简单的方法,因为您可以利用 xarray 的标记维度。 但是,您实际上可以在 xarray DataArray 上使用任何 numpy 函数。所以你也可以使用 np.diff 。但是,您最终会得到一个未标记的 numpy 数组,因此您必须重新添加维度和坐标。 最简单的方法是使用 data 参数的 copy 方法。它将创建一个与原始结构具有相同结构(相同的暗淡和坐标)但具有不同数据的数组:

# Compute diffs with numpy and write the results back into a DataArray
da.copy(data=np.diff(da, axis=da.get_axis_num("z"), prepend=0))