PySAL saltos naturales de la matriz de Numpy

11

Estoy intentando extraer valores de corte naturales de un ráster usando Python.

El proceso previsto va: Objeto de trama Arcpy a NumPy Array (usando RasterToNumPyArray ) a valores de ruptura natural (usando la función 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)

Este código devuelve el error "ValueError: la matriz debe ser bidimensional".

Hasta donde yo sé, greenArray es una matriz bidimensional.

líber
fuente
1
¿Has intentado comprobar las dimensiones de greenArray antes de intentar procesarlo con Natural_Breaks? Parece que llamar a .shape en la matriz te dará las dimensiones de la matriz. No he hecho nada de esto antes, pero esta publicación parece útil ... stackoverflow.com/questions/3061761/numpy-array-dimensions
Branco
1
Gracias Branco. Encontré ese hilo, lo que me llevó a creer que mi matriz era bidimensional. El regreso de greenArray.shape = (1536,2048) y greenArray.ndim = 2. Creo que he encontrado una solución (usando numpy.ravel ()), que escribiré en breve.
floema
1
@phloem Mirando el docco PySAL creo que tienes razón usando flatteny ravel; el Natural_Breaksparece aceptar solamente un vector 1d de los valores (o, un (n, 1)vector).
om_henners

Respuestas:

6

Gracias por la ayuda, Branco y om_henners.

La respuesta a mi problema parece ser usar numpy.ravel () para cambiar la matriz producida por arcpy.RasterToNumPy () a una matriz 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)
líber
fuente