Ich suche nach einem effizienten Weg, elementweise Gleichheit in einem 3D- oder N-D-Array zu finden, zum Beispiel gleichen Wert auf RGB-Pixel eines Bildes. Einige Testdaten:Elementweise Gleichheit in 3-D-Array mit beliebig großen Achsen
a = numpy.arange(100).reshape((10,10))
b = a.copy()
c = a.copy()
b[5,5] = 1
c[6,6] = 100
d = numpy.array([a,b,c])
Ich kann mich drei Möglichkeiten, von denen die ersten nicht gut auf mehr Dimensionen nicht verallgemeinern:
equal_mask = (d[0] == d[1]) & (d[0] == d[2])
oder
equal_mask = d.min(axis=0) == d.max(axis=0)
oder, vielleicht besser:
equal_mask = numpy.logical_and.reduce(d == d[0])
Gibt es einen effi Lösung
EDIT: Ich sollte klarstellen, dass ich nicht n-D, 3-D mit unterschiedlicher Länge auf der ersten Achse gemeint, zum Beispiel d = numpy.array([a,b,c,a,b,c])
.
'd [1:,:]' könnte als 'd [1:]' verkürzt werden. – Divakar
Danke für die Vorschläge. Ich werde meine aktuelle Antwort als akzeptiert markieren, es sei denn, es kommt etwas Besseres. – Benjamin
Das klingt fair für mich! – Divakar