Numpy 使用可变长度DataArray索引xarray数据

Numpy 使用可变长度DataArray索引xarray数据,numpy,python-xarray,Numpy,Python Xarray,我正在尝试使用DataArray索引从xarray数据集中提取数据。我的目标是沿着与阵列重叠的不同线段获取数据。为此,我获得了每条线的索引(根据长度,这些线的大小不同) 例如,对于第1行:x=[1,2,3],y=[7,8,9],类似地,对于第2行是x=[1,4,5,6,8],y=[0,2,7,9,6]等等,我有一些行是100x2。为此,我尝试了以下方法: df=xarray_dataset indx=xr.DataArray([[1,2,3],[1,4,5,6,8],[2,3]]) indy=x

我正在尝试使用DataArray索引从xarray数据集中提取数据。我的目标是沿着与阵列重叠的不同线段获取数据。为此,我获得了每条线的索引(根据长度,这些线的大小不同)

例如,对于第1行:
x=[1,2,3],y=[7,8,9]
,类似地,对于第2行是
x=[1,4,5,6,8],y=[0,2,7,9,6]
等等,我有一些行是100x2。为此,我尝试了以下方法:

df=xarray_dataset
indx=xr.DataArray([[1,2,3],[1,4,5,6,8],[2,3]])
indy=xr.DataArray([[7,9,8],[0,2,7,9,6],[4,5]])
dx_sel=df.isel(x=indx,y=indy)
然而,据我所知,每个数据数组索引的长度必须相等。我有没有办法处理这些问题。基本上,这些索引表示数据帧内不同段的x和y坐标,并获得每个段的平均值,如果只有很少的段,我有100个这样的段,我将能够为每个段索引使用循环,但是为每个段使用循环在计算上不有效


numpy阵列也存在类似的问题。是否有方法在索引中传递NaN或类似的内容,以便我们可以生成相同的形状,但不提取该索引的数据。

您可以使用
set\u index
->
unstack
机制,该机制基于
pd.MultiIndex

[4]中的
:df=xr.DataArray(np.arange(110).重塑(10,11),
…:dims=['x','y'])
在[5]中:indx=xr.DataArray([1,2,3,1,4,5,6,8,2,3],
…:dims=[“索引”],
…:coords={'i':('index',[0,0,0,1,1,1,1,1,2]),
…:'j':('index',[0,1,2,0,1,2,3,4,0,1]))
...:  
…:indy=xr.DataArray([7,9,8,0,2,7,9,6,4,5],dims=['index'],
…:coords={'i':('index',[0,0,0,1,1,1,1,1,2]),
…:'j':('index',[0,1,2,0,1,2,3,4,0,1]))
在[8]中:df.isel(x=indx,y=indy).set_index(index=[i',j']).unstack('index'))
出[8]:
数组([[18,31,41,nan,nan],
[11., 46., 62., 75., 94.],
[26,38,nan,nan,nan]]
协调:
*i(i)int64 0 1 2
*j(j)int64 01 2 3 4

这里,
indx
indy
具有无量纲坐标,
i
j
,它们基本上是索引在二维空间中的原始位置。

谢谢@Keisuke。我已经尝试过你的方法,但仍然无法得到我所期望的。关于我的问题,我补充了更多的细节。也许我还不明白你在期待什么。我不认为有一个简单的方法来处理这种可变长度数组。我的建议是把它放在一个大的一维数组中,并附上它的坐标('我的答案中有'i'和'j')。我现在用我问题的更多细节更新了我的问题。让我知道你对此的想法。