Saya mencoba untuk mengekstrak nilai istirahat alami dari raster menggunakan Python.
Proses yang dimaksud berjalan: Objek raster Arcpy ke NumPy Array (menggunakan RasterToNumPyArray ) ke nilai istirahat alami (menggunakan fungsi 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)
Kode ini mengembalikan kesalahan, "ValueError: matrix harus 2 dimensi".
Sejauh yang saya tahu, greenArray adalah array 2 dimensi.
1
Sudahkah Anda mencoba memeriksa dimensi greenArray sebelum mencoba memprosesnya dengan Natural_Breaks? Sepertinya memanggil .shape pada array akan memberi Anda dimensi array. Saya belum pernah melakukan ini sebelumnya, tetapi posting ini sepertinya membantu ... stackoverflow.com/questions/3061761/numpy-array-dimensions
—
Branco
Terima kasih, Branco. Saya memang menemukan utas itu, yang membuat saya percaya bahwa array saya adalah 2-dimensi. Kembalinya greenArray.shape = (1536.2020), dan greenArray.ndim = 2. Saya pikir saya telah menemukan solusi (menggunakan numpy.ravel ()), yang akan saya tulis segera.
—
Floem
@ phloem Melihat dokumen PySAL, saya pikir Anda benar dengan menggunakan
—
om_henners
flatten
dan ravel
; yang Natural_Breaks
tampaknya hanya menerima vektor 1d nilai (atau, sebuah (n, 1)
vektor).