我有一个大的numpy 2d数组(10000,10000),其中随机标记区域(具有相同数字的单元簇)。结果,一些单独的区域被分配给相同的标签。我想要的是重新标记numpy 2d数组,以便将所有单独的区域分配给唯一标签(参见示例)。
我现在如何用循环来解决这个问题。但是当我使用大量小区域的大型阵列时,这个过程需要很长时间。因此,矢量化方法会更合适。
示例:
- 两个单独的区域标有1
- 两个独立的地区
标有3
String post_param_1 = request.getParameter("param_1");
if (post_param_1 != null && post_param_1.matches(regex)) {
// param present and valid
}
## Input
random_arr=np.array([[1,1,3,3],[1,2,2,3],[2,2,1,1],[3,3,3,1]])
带循环的缓慢解决方案:
## Apply function
unique_arr=relabel_regions(random_arr)
## Output
>>> unique_arr
array([[1, 1, 3, 3],
[1, 2, 2, 3],
[2, 2, 4, 4],
[5, 5, 5, 4]])
答案 0 :(得分:4)
让我们作弊,然后使用一些高质量的图书馆(scikit-image)来提供这个。
您可以从它的实施中学习,或者只是使用它!
import numpy as np
from skimage.measure import label
random_arr = np.array([[1,1,3,3],[1,2,2,3],[2,2,1,1],[3,3,3,1]])
labels = label(random_arr, connectivity=1) # neighborhood-definition here!
print(labels)
[[1 1 2 2]
[1 3 3 2]
[3 3 4 4]
[5 5 5 4]]
编辑:正如Jeon在评论中提到的那样,如果不想再使用一个额外的库,scipy的scipy.ndimage.measurements.label也可能成为候选者!感谢Jeon的评论!