Python 使用apply_ufunc在Xarray数据数组上使用sp.ndimage.label
假设我有一个简单的数组:Python 使用apply_ufunc在Xarray数据数组上使用sp.ndimage.label,python,python-xarray,ndimage,Python,Python Xarray,Ndimage,假设我有一个简单的数组: data = [1,1,0,0,1,1,1] 我可以使用scipy ndimage模块将标签应用于此数据: groups, _ = sp.ndimage.label(data) 导致 In [68]: print(groups) [1 1 0 0 2 2 2] 现在,我想在xarray DataArray上执行相同的标记函数 xr_data = xr.DataArray([1,1,0,0,1,1,1], coords = [("x", [0,1
data = [1,1,0,0,1,1,1]
我可以使用scipy ndimage模块将标签应用于此数据:
groups, _ = sp.ndimage.label(data)
导致
In [68]: print(groups)
[1 1 0 0 2 2 2]
现在,我想在xarray DataArray上执行相同的标记函数
xr_data = xr.DataArray([1,1,0,0,1,1,1], coords = [("x", [0,1,2,3,4,5,6])])
我知道我可以在xr_data
上调用与以前相同的函数,但执行此调用的输出是一个numpy数组,它在我的实际数据集中太大,无法放入内存
似乎我需要的是xr.apply_ufunc
函数。然而,我很难让它工作
def xr_label(arr):
return xr.apply_ufunc(sp.ndimage.label, arr)
xr_groups, _ = xr_label(xr_data)
这导致:
ValueError:应用的函数返回的数据的维度数意外。收到0个维度,但需要1个名称为('x',)的维度
我发现关于apply_ufunc方法的文档很难解释。有人能帮我解决这个问题吗?您必须将
输入核心dims
和输出核心dims
定义为应用核心dims
的参数。请参阅以下网址的文档:
就你而言,我认为这将是:
xr.apply_ufunc(sp.ndimage.label, arr, input_core_dims=[['x']], output_core_dims=[['x']])
最近,我也在努力理解
apply\u ufunc
(公平地说,我还没有完全理解),但是这个例子对我帮助很大。你必须定义input\u core\u dims
和output\u core\u dims
作为apply\u ufunc
的参数。请参阅以下网址的文档:
就你而言,我认为这将是:
xr.apply_ufunc(sp.ndimage.label, arr, input_core_dims=[['x']], output_core_dims=[['x']])
最近,我也在努力理解apply_func(公平地说,我还没有完全理解),但是at的例子对我帮助很大。谢谢!我所做的唯一修改是在输出维度中添加另一个空列表:
output\u core\u dims=[['x'],[]
,因为label函数还返回两个东西-一个包含每个元素标签的数组,以及一个给出找到的组数的整数。谢谢!我所做的唯一修改是在输出维度中添加另一个空列表:output\u core\u dims=[['x'],[]
,因为label函数还返回两个内容—一个包含每个元素标签的数组,以及一个给出找到的组数的整数。