PySAL natürliche Brüche von Numpy Array

11

Ich versuche, mit Python natürliche Unterbrechungswerte aus einem Raster zu extrahieren.

Der beabsichtigte Prozess lautet : Arcpy-Rasterobjekt an NumPy-Array (unter Verwendung von RasterToNumPyArray ) auf natürliche Unterbrechungswerte (unter Verwendung der PySAL-Funktion für natürliche Unterbrechungen ).

import arcpy, pysal
from pysal.esda.mapclassify import Natural_Breaks as nb
# code to create greenIndex arcpy Raster object here
greenArray = arcpy.RasterToNumPyArray(greenIndex)
breaks = nb(greenArray,k=2,initial=20)

Dieser Code gibt den Fehler "ValueError: Matrix muss zweidimensional sein" zurück.

Soweit ich weiß, ist greenArray ein zweidimensionales Array.

Phloem
quelle
1
Haben Sie versucht, die greenArray-Dimensionen zu überprüfen, bevor Sie versuchen, sie mit Natural_Breaks zu verarbeiten? Wenn Sie .shape für das Array aufrufen , erhalten Sie die Array-Dimensionen. Ich habe noch nichts davon gemacht, aber dieser Beitrag scheint hilfreich zu sein ... stackoverflow.com/questions/3061761/numpy-array-dimensions
Branco
1
Danke, Branco. Ich bin auf diesen Thread gestoßen, was mich glauben ließ, dass mein Array zweidimensional war. Die Rückgabe von greenArray.shape = (1536,2048) und greenArray.ndim = 2. Ich denke, ich habe eine Lösung gefunden (mit numpy.ravel ()), die ich in Kürze aufschreiben werde.
Phloem
1
@phloem Mit Blick auf den PySAL-Docco denke ich, dass Sie mit der Verwendung von flattenund Recht haben ravel. Das Natural_Breaksscheint nur einen 1d-Wertevektor (oder einen (n, 1)Vektor) zu akzeptieren .
Om_henners

Antworten:

6

Danke für die Hilfe, Branco und om_henners.

Die Antwort auf mein Problem scheint darin zu bestehen, mit numpy.ravel () das von arcpy.RasterToNumPy () erzeugte Array in ein 1D-Array zu ändern:

import arcpy, pysal
from pysal.esda.mapclassify import Natural_Breaks as nb
# code to create greenIndex arcpy Raster object here
greenArray = arcpy.RasterToNumPyArray(greenIndex)
breaks = nb(greenArray.ravel(),k=2,initial=20)
Phloem
quelle