Pausas naturais PySAL da matriz Numpy

11

Estou tentando extrair valores de quebra naturais de uma varredura usando Python.

O processo pretendido vai: Objeto de varredura do Arcpy para NumPy Array (usando RasterToNumPyArray ) até valores de quebra naturais (usando a função 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 retorna o erro "ValueError: matrix deve ser bidimensional".

Tanto quanto eu sei, greenArray é uma matriz bidimensional.

floema
fonte
1
Você já tentou verificar as dimensões do greenArray antes de tentar processá-lo com Natural_Breaks? Parece que chamar .shape na matriz fornecerá as dimensões da matriz. Eu não tenho feito nada disso antes, mas este post parece votos ... stackoverflow.com/questions/3061761/numpy-array-dimensions
Branco
1
Obrigado, Branco. Me deparei com esse segmento, o que me levou a acreditar que minha matriz era bidimensional. O retorno de greenArray.shape = (1536,2048) e greenArray.ndim = 2. Acho que encontrei uma solução (usando numpy.ravel ()), que escreverei em breve.
floema
1
@phloem Olhando para a documentação do PySAL, acho que você está certo em usar flattene ravel; o Natural_Breaksparece aceitar apenas um vector 1d de valores (ou, um (n, 1)vector).
om_henners

Respostas:

6

Obrigado pela ajuda, Branco e om_henners.

A resposta para o meu problema parece ser usar numpy.ravel () para alterar a matriz produzida por arcpy.RasterToNumPy () para uma 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)
floema
fonte