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)
。要获得简单完整的解释,包括对角线以外的结构定制,请检查:此外,“标签”之后的下一步可能是同一包装的“查找对象”。它为每个找到的“对象”返回一个切片列表。使用切片的“开始”和“停止”属性,可以直接进入索引。