Ich habe 2d binäre numpy
arrays
unterschiedlicher Größe, die bestimmte Muster enthalten. Genau wie folgt aus:Berechnen Sie die Anzahl der gleichen benachbarten Zellen in einem Array numpy
import numpy
a = numpy.zeros((6,6), dtype=numpy.int)
a[1,2] = a[1,3] = 1
a[4,4] = a[5,4] = a[4,3] = 1
Hier wird das „Bild“ enthält zwei Patches eins mit 2 und eines mit 3 Zellen verbunden.
print a
array([[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, 1, 0],
[0, 0, 0, 0, 1, 0]])
Ich möchte wissen, wie oft eine Nicht-Null-Zelle eine andere Nicht-Null-Zelle grenzt (Nachbarn als Saatkrähe Fall definiert, so die Zellen nach links, rechts, unten und oben jeder Zelle) einschließlich ihrer Pseudo-Replikation (also umgekehrt).
Ein vorheriger approach für innere Grenzen gibt falsche Werte (5) zurück, da die äußeren Grenzen berechnet werden sollten.
numpy.abs(numpy.diff(a, axis=1)).sum()
So für die obige Testanordnung, die korrekte Gesamtergebnis wäre (das obere Patch hat zwei interne Grenzen, die unteren vier) sein.
Dankbar für irgendwelche Tipps!
EDIT:
Fehler: Die untere hat offensichtlich 4 Innenkanten (benachbarte Zellen mit demselben Wert)
die gewünschten Nachbarschaft
Was bedeutet "Nachbarn als Saatkrähe Fall definiert" bedeuten? – user2357112
Warum ist das untere sechs? – HYRY
Nun, die naheliegende Lösung wäre, einfach über die Indizes zu springen und zu zählen. –