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:
Sebagai contoh tujuan, katakanlah saya ingin mengoptimalkan alur kerja pemrosesan intensif berikut menggunakan array NumPy:
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?
Jawaban:
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.
sumber