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.


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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.