PySAL naturalne zrywa z tablicy Numpy

11

Próbuję wyodrębnić naturalne wartości przerwania z rastra za pomocą Pythona.

Zamierzony proces idzie: Arcpy obiekt rastrowy do NumPy Array (przy użyciu RasterToNumPyArray ) do naturalnych wartości przerwania (przy użyciu funkcji PySAL Natural Breaks ).

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)

Ten kod zwraca błąd „ValueError: matrix musi być dwuwymiarowy”.

O ile mi wiadomo, greenArray to tablica dwuwymiarowa.

łyko
źródło
1
Czy próbowałeś sprawdzić wymiary greenArray przed próbą przetworzenia go za pomocą Natural_Breaks? Wygląda na to, że wywołanie .shape na tablicy da ci wymiary tablicy. Nie robiłem tego wcześniej, ale ten post wydaje się pomocny ... stackoverflow.com/questions/3061761/numpy-array-dimensions
Branco
1
Dzięki, Branco. Natknąłem się na ten wątek, który doprowadził mnie do przekonania, że ​​moja tablica była dwuwymiarowa. Zwrot greenArray.shape = (1536,2048) i greenArray.ndim = 2. Myślę, że wymyśliłem rozwiązanie (używając numpy.ravel ()), które wkrótce napiszę.
łyko
1
@ phloem Patrząc na docco PySAL Myślę, że masz rację używając flatteni ravel; Natural_Breakswydaje się tylko zaakceptować 1d wektor wartości (lub, o (n, 1)wektor).
om_henners

Odpowiedzi:

6

Dzięki za pomoc, Branco i om_henners.

Odpowiedzią na mój problem wydaje się być użycie numpy.ravel () do zmiany tablicy utworzonej przez arcpy.RasterToNumPy () na tablicę 1D:

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)
łyko
źródło