我想知道是否有一个函数可以对像
这样的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。
答案 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]]
与您的预期结果相同,直至标签的排列(无论如何都没有任何意义)。