Numpy dizisinden PySAL doğal molaları


11

Python kullanarak bir raster doğal mola değerleri ayıklamak çalışıyorum.

Amaçlanan işlem şu şekildedir : Arcpy raster nesnesini NumPy Array'a ( RasterToNumPyArray kullanarak ) doğal kesme değerlerine ( PySAL Natural Breaks işlevini kullanarak ).

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)

Bu kod "ValueError: matrix 2 boyutlu olmalıdır" hatasını döndürür.

Bildiğim kadarıyla greenArray 2 boyutlu bir dizidir.


1
Natural_Breaks ile işlemeden önce greenArray boyutlarını kontrol etmeyi denediniz mi? Dizide .shape çağırmak size dizi boyutlarını verecektir. Daha önce bunlardan hiçbirini yapmadım, ancak bu yazı faydalı görünüyor ... stackoverflow.com/questions/3061761/numpy-array-dimensions
Branco

1
Teşekkürler, Branco. Dizimin 2 boyutlu olduğuna inanmama neden olan bu iş parçacığına rastladım. GreenArray.shape = (1536,2048) ve greenArray.ndim = 2'nin dönüşü. Kısa bir süre içinde yazacağım bir çözüm (numpy.ravel () kullanarak) bulduğumu düşünüyorum.
phloem

1
Sana kullanarak yaptıkları anda düşünmek docco @phloem PySAL baktığımızda flattenve ravel; Natural_Breakssadece 1d değerleri vektörü (ya da, bir kabul görünmektedir (n, 1)vektörü).
om_henners

Yanıtlar:


6

Yardımın için teşekkürler Branco ve om_henners.

Sorunumun cevabı, arcpy.RasterToNumPy () tarafından üretilen diziyi 1D dizisine değiştirmek için numpy.ravel () kullanmak gibi görünüyor:

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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.