2017-11-28 3 views
0

Ob es wiebenachbarte gleiche Elemente eines Arrays numpy 2D-Gruppierung

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]]) 

in ein Array dies eine Funktion der Gruppe gleich ist, verbunden Elemente eines 2D-Array ist:

  [[1, 1, 2 ,2, 3, 3], 
      [4, 4, 3, 3, 3, 3], 
      [4, 5, 5, 6, 3 ,7], 
      [8, 8, 5, 7, 7, 7]] 

The Regeln für die Verbindung: Ein Element [i, j] ist verbunden mit [i-1, j], [i + 1, j], [i, j-1] und [i, j + 1].

Ich fand scipy.ndimage.measurements.label aber das Problem ist, dass es nur die Array-Werte als Null (Hintergrund) und Einsen.

+0

Was ist los mit dem ersten Array? Die Elemente sind bereits "gruppiert". –

+0

@ReblochonMasque zum Beispiel '12,12' in der ersten Reihe wird als 1 gruppiert, aber in der letzten Reihe als 8 –

+1

Warum ist dann 10 in der zweiten Reihe in der gleichen Gruppe wie 10 in der 3.? –

Antwort

1

Abhängig von der Anzahl der eindeutigen Werte kann es praktisch sein, label in einer Schleife zu verwenden und die Ergebnisse mit entsprechenden Offsets hinzuzufügen. Die Offsets werden benötigt, da, nachdem die ersten drei Features beschriftet sind, die Labels für nachfolgende mit 4 beginnen und so weiter.

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) 

Dieser druckt

[[4 4 7 7 3 3] 
[1 1 3 3 3 3] 
[1 8 8 2 3 6] 
[5 5 8 6 6 6]] 

, die die gleiche wie Ihre erwartete Ergebnis ist, bis zu Permutation von Etiketten (die haben keine Bedeutung sowieso).

Verwandte Themen