Pauses naturelles PySAL du réseau Numpy

11

J'essaie d'extraire des valeurs de rupture naturelles à partir d'un raster à l'aide de Python.

Le processus prévu est le suivant: objet raster Arcpy vers NumPy Array (à l'aide de RasterToNumPyArray ) vers des valeurs de rupture naturelles (à l'aide de la fonction 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)

Ce code renvoie l'erreur "ValueError: la matrice doit être bidimensionnelle".

Pour autant que je sache, greenArray est un tableau à 2 dimensions.

phloème
la source
1
Avez-vous essayé de vérifier les dimensions de greenArray avant d'essayer de les traiter avec Natural_Breaks? On dirait que l'appel de .shape sur le tableau vous donnera les dimensions du tableau. Je n'ai rien fait de tout cela avant, mais cet article semble utile ... stackoverflow.com/questions/3061761/numpy-array-dimensions
Branco
1
Merci, Branco. Je suis tombé sur ce fil, ce qui m'a amené à croire que mon réseau était bidimensionnel. Le retour de greenArray.shape = (1536,2048) et greenArray.ndim = 2. Je pense avoir trouvé une solution (en utilisant numpy.ravel ()), que j'écrirai sous peu.
phloème
1
@phloem En regardant le docco PySAL, je pense que vous avez raison d'utiliser flattenet ravel; le Natural_Breakssemble accepter uniquement un vecteur de valeurs 1d (ou un (n, 1)vecteur).
om_henners

Réponses:

6

Merci pour l'aide, Branco et om_henners.

La réponse à mon problème semble être d'utiliser numpy.ravel () pour changer le tableau produit par arcpy.RasterToNumPy () en un tableau 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)
phloème
la source