对2D numpy数组的相邻相等元素进行分组

时间:2017-11-28 02:38:12

标签: python numpy

我想知道是否有一个函数可以对像

这样的2D数组的相等连接元素进行分组
a = np.array([[12,12,14,14,11,11],
              [10,10,11,11,11,11],
              [10,14,14,10,11,13],
              [12,12,14,13,13,13]])

进入一个数组:

            [[1, 1, 2 ,2, 3, 3],
             [4, 4, 3, 3, 3, 3],
             [4, 5, 5, 6, 3 ,7],
             [8, 8, 5, 7, 7, 7]]

连接规则:元素[i,j]连接到[i-1,j],[i + 1,j],[i,j-1]和[i,j + 1] 。

我发现scipy.ndimage.measurements.label但问题是它只是将数组值视为零(背景)和1。

1 个答案:

答案 0 :(得分:1)

根据唯一值的数量,在循环中简单地使用label,并使用适当的偏移量添加结果可能是切实可行的。需要偏移是因为在标记了前3个特征之后,后续标记的标签应该以4开头,依此类推。

from scipy.ndimage import label
values = np.unique(a.ravel())
offset = 0
result = np.zeros_like(a)
for v in values:
  labeled, num_features = label(a == v)
  result += labeled + offset*(labeled > 0)
  offset += num_features
print(result)

打印

[[4 4 7 7 3 3]
 [1 1 3 3 3 3]
 [1 8 8 2 3 6]
 [5 5 8 6 6 6]]

与您的预期结果相同,直至标签的排列(无论如何都没有任何意义)。