我的問題是以下,如何在二維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
這不行,我不能看到那裏的錯誤是...
我想知道是否也許有一個簡單的方法來做到這一點。