Bagaimana saya bisa memanfaatkan array NumPy untuk mengoptimalkan geoproses data besar?

16

Saya tertarik mempelajari cara memanfaatkan array NumPy untuk mengoptimalkan geoprocessing. Banyak pekerjaan saya melibatkan "data besar", di mana geoprocessing sering membutuhkan waktu berhari-hari untuk menyelesaikan tugas-tugas tertentu. Tidak perlu dikatakan, saya sangat tertarik dalam mengoptimalkan rutinitas ini. ArcGIS 10.1 memiliki sejumlah fungsi NumPy yang dapat diakses melalui arcpy, termasuk:

  1. NumPyArrayToFeatureClass (arcpy.da)
  2. RasterToNumPyArray (arcpy)
  3. TableToNumPyArray (arcpy.da)

Sebagai contoh tujuan, katakanlah saya ingin mengoptimalkan alur kerja pemrosesan intensif berikut menggunakan array NumPy:

masukkan deskripsi gambar di sini

Gagasan umum di sini adalah bahwa ada sejumlah besar titik berbasis vektor yang bergerak melalui operasi berbasis vektor dan raster yang menghasilkan dataset raster biner integer.

Bagaimana saya bisa menggabungkan array NumPy untuk mengoptimalkan jenis alur kerja ini?

Harun
sumber
2
FYI, ada juga fungsi NumPyArrayToRaster dan fungsi FeatureClassToNumPyArray .
blah238
2
The Multiprocessing dengan ArcGIS posting blog memiliki beberapa informasi yang baik yang mungkin berlaku di sini. Anda mungkin juga tertarik dengan pertanyaan multi-pemrosesan lainnya .
blah238
3
Tampak bagi saya bahwa sebelum berpikir tentang menggunakan Numpy di ArcPy, Anda harus terlebih dahulu memahami apa kelebihan yang ditawarkan array NumPy dibandingkan daftar Python. Ruang lingkup Numpy jauh lebih luas daripada ArcGIS.
gen
2
@ gen, jawaban StackOverflow ini sepertinya merangkum dengan cukup baik.
blah238
3
Selain itu, jika Anda juga tertarik pada Hadoop - ada perkembangan besar (Spasial) Data yang patut dicoba di video ini dan di GIS Tools untuk Hadoop
PolyGeo

Jawaban:

3

Saya pikir inti dari pertanyaan di sini adalah tugas mana dalam alur kerja Anda yang tidak benar-benar bergantung pada ArcGIS? Kandidat yang jelas termasuk operasi tabular dan raster. Jika data harus dimulai dan diakhiri dalam gdb atau format ESRI lainnya, maka Anda perlu mengetahui cara meminimalkan biaya reformat ini (yaitu, meminimalkan jumlah perjalanan pulang-pergi) atau bahkan membenarkannya - mungkin saja terlalu mahal untuk dirasionalisasi. Taktik lain adalah memodifikasi alur kerja Anda untuk menggunakan model data yang ramah-python sebelumnya (misalnya, seberapa cepat Anda bisa membuang poligon vektor?).

Untuk echo @ gen, walaupun numpy / scipy benar-benar hebat, jangan berasumsi bahwa ini adalah satu-satunya pendekatan yang tersedia. Anda juga dapat menggunakan daftar, set, kamus sebagai struktur alternatif (meskipun tautan @ blah238 cukup jelas tentang perbedaan efisiensi), ada juga generator, iterator, dan semua jenis alat hebat, cepat, dan efisien lainnya untuk mengerjakan struktur ini dengan python. Raymond Hettinger, salah satu pengembang Python, memiliki semua jenis konten Python umum yang bagus di luar sana. Video ini adalah contoh yang bagus .

Juga, untuk menambahkan gagasan @ blah238 tentang pemrosesan multipleks, jika Anda menulis / mengeksekusi di dalam IPython (bukan hanya lingkungan python "biasa"), Anda dapat menggunakan paket "paralel" mereka untuk mengeksploitasi banyak core. Saya bukan jagoan dengan hal ini, tetapi merasa sedikit lebih tinggi level-ramah / pemula dari pada hal-hal multiproses. Mungkin benar-benar hanya masalah agama pribadi di sana, jadi ambillah dengan sebutir garam. Ada gambaran yang bagus tentang hal itu mulai pukul 2:13:00 di video ini . Seluruh video sangat bagus untuk IPython secara umum.

Roland
sumber