I eine 8x8-Matrix haben:in einer Matrix benachbarten Punkten Tagging
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 1
-Code, es zu schaffen:
examplemat <- matrix(c(1, 1, rep(0, 6), 1, rep(0, 9), 1, 1, rep(0, 17), 1, rep(0, 7), 1, rep(0, 5), 1, rep(0, 11), 1), 8, 8, byrow=T)
Die, die extrahiert wurden, als Koordinaten:
onecoords <- which(examplemat == 1, arr.ind=T)
row col
[1,] 1 1
[2,] 2 1
[3,] 1 2
[4,] 3 3
[5,] 3 4
[6,] 7 4
[7,] 5 6
[8,] 6 6
[9,] 8 8
I benötigen einen einfachen, vektorisierten Ansatz zum Gruppieren der Einsen in Gruppen benachbarter Koordinaten. (Für die Zwecke dieser Aufgabe würde ich 4-Wege-Up/Down/Links/Rechts-Nachbarschaft, aber Sie möchten möglicherweise auch die Option der 8-Wege-Nachbarschaft einschließlich der Diagonalen.)
In dem Beispiel würden wir am Ende mit 5 Cluster von Zellen:
row col clus
[1,] 1 1 A
[2,] 2 1 A
[3,] 1 2 A
[4,] 3 3 B
[5,] 3 4 B
[6,] 7 4 C
[7,] 5 6 D
[8,] 6 6 D
[9,] 8 8 E
Das 4-Wege-adjacency Check ist ziemlich einfach: sum(abs(onecoords[1,] - onecoords[2,])) == 1
Aber ich bin zu kämpfen, wie man trainiert diese effizient vektorisieren.
Sie könnten etwas finden [hier] (http://stackoverflow.com/questions/6518133/clustering-list-for-hclust-function) nützlich und hoffentlich allgemein genug; z.B. hier 'cbind (onecoords, clus = cœtree (hclust (dist (onecoords," maximum ")), h = 1)) ' –
Ich stimme zu, dass eine Verwendung von' dist' oder eine allgemeinere Mahalanobis-Distanzfunktion helfen wird. –