mio problema è il seguente,Come trovare le dimensioni dei cluster in serie numpy 2D?
Ho una matrice NumPy 2D riempito con 0 un 1, con una condizione al contorno assorbente (tutti gli elementi esterni sono 0), ad esempio:
[[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]]
voglio per creare una funzione che prende questo array e la sua dimensione lineare L come parametri di input, (in questo caso L = 10) e restituisce l'elenco delle dimensioni del cluster di questo array.
per "cluster" intendo i gruppi isolati di elementi 1 della matrice
dell'elemento array [i] [j] è isolato se tutti i suoi vicini sono zeri, ei suoi vicini sono gli elementi:
[i+1][j]
[i-1][j]
[i][j+1]
[i][j-1]
Così nell'array precedente abbiamo 7 cluster di dimensioni (2,1,2,6,1,1,1)
ho provato a completare questo compito creando due funzioni, il primo è una funzione ricorsiva:
e dovrebbe restituire la dimensione di un cluster. Ogni volta che la funzione trova un elemento dell'array uguale a 1 aumenta il valore del contatore "count" e cambia il valore dell'elemento a 0, in questo modo ogni elemento "1" viene contato una sola volta. Se uno dei vicini dell'elemento è uguale a 1, la funzione si chiama su quell'elemento.
La seconda funzione è:
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
e deve restituire l'elenco contenente le dimensioni di cluster. Il ciclo for itera da 1 a L-1, perché tutti gli elementi esterni sono 0.
questo non funziona e non riesco a vedere dove l'errore è ...
Mi chiedevo se forse c'è un modo più semplice per farlo.