我的问题是以下,如何在二维numpy数组中找到簇大小?
我有一个2D numpy的阵列用0填充的1,用吸收边界条件(所有外元件是0),例如:
[[0 0 0 0 0 0 0 0 0 0]
[0 0 1 0 0 0 0 0 0 0]
[0 0 1 0 1 0 0 0 1 0]
[0 0 0 0 0 0 1 0 1 0]
[0 0 0 0 0 0 1 0 0 0]
[0 0 0 0 1 0 1 0 0 0]
[0 0 0 0 0 1 1 0 0 0]
[0 0 0 1 0 1 0 0 0 0]
[0 0 0 0 1 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]]
我想创建一个函数,该函数将此数组及其线性维度L作为输入参数(本例中L = 10),并返回此数组的簇大小列表。
所谓“集群”我指的是阵列
数组元素[i] [j]时,如果它的所有邻居都为零分离,并且元件1的分离的基团其邻居是元素:
[i+1][j]
[i-1][j]
[i][j+1]
[i][j-1]
所以前一阵在我们的大小(2,1,2,6,1,1,1)
我试图通过创建两个函数来完成这个任务的7个集群,第一个是递归函数:
def clust_size(array,i,j):
count = 0
if array[i][j] == 1:
array[i][j] = 0
if array[i-1][j] == 1:
count += 1
array[i-1][j] = 0
clust_size(array,i-1,j)
elif array[i][j-1] == 1:
count += 1
array[i-1][j] = 0
clust_size(array,i,j-1)
elif array[i+1][j] == 1:
count += 1
array[i-1][j] = 0
clust_size(array,i+1,j)
elif array[i][j+1] == 1:
count += 1
array[i-1][j] = 0
clust_size(array,i,j+1)
return count+1
它应该返回一个集群的大小。每次函数发现数组元素等于1时,它会增加计数器“计数”的值,并将元素的值更改为0,这样每个“1”元素只计算一次。 如果该元素的其中一个相邻元素等于1,则该函数会在该元素上调用它自己。
第二个功能是:
def clust_list(array,L):
sizes_list = []
for i in range(1,L-1):
for i in range(1,L-1):
count = clust_size(array,i,j)
sizes_list.append(count)
return sizes_list
和它应该返回含有所述簇的大小的列表。 for循环迭代从1到L-1,因为所有的外部因素为0
这不行,我不能看到那里的错误是...
我想知道是否也许有一个简单的方法来做到这一点。