Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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 识别2D numpy数组中的连续区域_Python_Algorithm_Numpy - Fatal编程技术网

Python 识别2D numpy数组中的连续区域

Python 识别2D numpy数组中的连续区域,python,algorithm,numpy,Python,Algorithm,Numpy,我有一个很大的numpy数组,我在上面应用了一个过滤器。我想识别这个屏蔽数组中的连续区域。这里我定义了一个区域是连续的,如果对于任何索引(x1,y1)到任何其他索引(x2,y2),它们属于相同的区域,如果沿着轴的相等整数步数(对角线是有效步数)有一个True值的路径 这可能不像一幅简单的图画那么清晰。鉴于面具: 0010000 0100000 0110000 0000011 1000010 应确定三个区域,以便输出类似于 [ [[0,2],[1,1],[2,1],[2,2]], [[3,5],

我有一个很大的
numpy
数组,我在上面应用了一个过滤器。我想识别这个屏蔽数组中的连续区域。这里我定义了一个区域是连续的,如果对于任何索引
(x1,y1)
到任何其他索引
(x2,y2)
,它们属于相同的区域,如果沿着轴的相等整数步数(对角线是有效步数)有一个
True
值的路径

这可能不像一幅简单的图画那么清晰。鉴于面具:

0010000
0100000
0110000
0000011
1000010
应确定三个区域,以便输出类似于

[ [[0,2],[1,1],[2,1],[2,2]], [[3,5],[3,6],[4,5]], [[4,0]] ]

我想使用
numpy
中内置的东西,而不必编写自己的算法。对文档的一点研究只发现了我所要求的一部分。

您正在寻找
scipy.ndimage.label
,更多信息<代码>标签返回一个与输入形状相同的数组,其中每个“唯一特征具有唯一值”,因此,如果需要特征的索引,可以执行以下操作:

labels, numL = label(array)
label_indices = [(labels == i).nonzero() for i in xrange(1, numL+1)]

要包含对角线,请执行以下操作:
s=ndimg.generate_binary_structure(2,2)
然后
labels,numL=ndimg.label(array,structure=s)
。要获得简单完整的解释,包括对角线以外的结构定制,请检查:此外,“标签”之后的下一步可能是同一包装的“查找对象”。它为每个找到的“对象”返回一个切片列表。使用切片的“开始”和“停止”属性,可以直接进入索引。