Istirahat alami PySAL dari array Numpy


11

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

1
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

1
@ phloem Melihat dokumen PySAL, saya pikir Anda benar dengan menggunakan flattendan ravel; yang Natural_Breakstampaknya hanya menerima vektor 1d nilai (atau, sebuah (n, 1)vektor).
om_henners

Jawaban:


6

Terima kasih atas bantuannya, Branco dan om_henners.

Jawaban untuk masalah saya tampaknya menggunakan numpy.ravel () untuk mengubah array yang dihasilkan oleh arcpy.RasterToNumPy () ke array 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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.