如何在 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(和一般编码)的新手,所以任何帮助将不胜感激。
如果我对你的理解正确,你想要执行以下操作:
- 计算区域沿 z 维度的差异。这必然导致坐标比以前更短。
- 然后你想把第一个深度的区域放在前面以获得相同长度的数组。
你可以用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))
给定 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(和一般编码)的新手,所以任何帮助将不胜感激。
如果我对你的理解正确,你想要执行以下操作:
- 计算区域沿 z 维度的差异。这必然导致坐标比以前更短。
- 然后你想把第一个深度的区域放在前面以获得相同长度的数组。
你可以用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))