Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用apply_ufunc在Xarray数据数组上使用sp.ndimage.label_Python_Python Xarray_Ndimage - Fatal编程技术网

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函数还返回两个内容—一个包含每个元素标签的数组,以及一个给出找到的组数的整数。