如何在xarray.DataArray.diff之前预加值?

2024-05-15 07:38:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

比如:

面积_1=Af_1

面积2=面积1-面积2

面积i=面积i-面积i(i-1)

如果是在numpy中,我可以使用np.diff(array, prepend=array[0]),但是prepend选项在xarray中不可用。有没有办法模仿xarray中的np.diff(array, prepend=0)

我对xarray(以及一般的编码)是新手,因此如果您有任何帮助,我将不胜感激


Tags: numpy编码time选项npdiffareaarray
1条回答
网友
1楼 · 发布于 2024-05-15 07:38:36

如果我理解正确,您需要执行以下操作:

  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数据阵列上使用任何numpy函数。因此,您也可以使用np.diff。但是,最终将得到一个未标记的numpy数组,因此必须读取维度和坐标。 最简单的方法是使用data参数的copy方法。它将创建一个结构与原始阵列相同(DIM和coords相同)但数据不同的阵列:

# 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))

相关问题 更多 >