Büyük veri coğrafi işlemesini optimize etmek için NumPy dizilerini nasıl kullanabilirim?


16

Coğrafi işlemeyi optimize etmek için NumPy dizilerini nasıl kullanacağımı öğrenmekle ilgileniyorum. Çalışmalarımın büyük bir kısmı, coğrafi işlemenin belirli görevleri yerine getirmek için genellikle günler sürdüğü "büyük veri" yi içeriyor. Söylemeye gerek yok, bu rutinleri optimize etmekle çok ilgileniyorum. ArcGIS 10.1, arcpy aracılığıyla erişilebilen bir dizi NumPy fonksiyonuna sahiptir, bunlar arasında:

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

Örneğin, diyelim ki NumPy dizilerini kullanarak aşağıdaki işleme yoğun iş akışını optimize etmek istiyorum:

resim açıklamasını buraya girin

Buradaki genel fikir, hem vektör hem de raster tabanlı işlemler boyunca hareket eden ve ikili tamsayı raster veri kümesiyle sonuçlanan çok sayıda vektör tabanlı noktanın olmasıdır.

Bu tür iş akışını optimize etmek için NumPy dizilerini nasıl dahil edebilirim?


2
FYI, ayrıca bir NumPyArrayToRaster işlevi ve bir FeatureClassToNumPyArray işlevi vardır.
blah238

2
ArcGIS ile Çoklu İşlem blog gönderisi, burada geçerli olabilecek bazı iyi bilgilere sahiptir. Diğer çok işlemli sorularla da ilgilenebilirsiniz .
blah238

3
Bana öyle geliyor ki ArcPy'de Numpy kullanmayı düşünmeden önce, NumPy dizilerinin Python listelerine göre ne gibi avantajlar sunduğunu anlamanız gerekiyor. Numpy'nin kapsamı ArcGIS'ten çok daha geniştir.
Gen

2
@Gene, bu StackOverflow yanıtı oldukça iyi özetliyor gibi görünüyor.
blah238

3
Bir yana, Hadoop ile de ilgileniyorsanız - Bu videoda ve Hadoop için GIS Araçları
PolyGeo'da

Yanıtlar:


3

Buradaki sorunun en önemli noktası, iş akışınızdaki hangi görevlerin gerçekten ArcGIS'e bağlı olmadığıdır? Açık adaylar tablo ve tarama operasyonlarını içerir. Verilerin bir gdb veya başka bir ESRI formatında başlaması ve bitmesi gerekiyorsa, bu yeniden biçimlendirmenin maliyetini nasıl en aza indireceğinizi (yani, gidiş dönüş sayısını en aza indirgeyin) veya hatta haklı çıkarmanız gerekir - basitçe rasyonalize etmek pahalı. Başka bir taktik, iş akışınızı python dostu veri modellerini daha önce kullanacak şekilde değiştirmektir (örneğin, vektör çokgenlerini ne kadar sürede terk edebilirsiniz?).

@Gene yankılanması için, numpy / scipy gerçekten harika olsa da, bunların mevcut tek yaklaşımlar olduğunu düşünmeyin. Listeleri, kümeleri, sözlükleri alternatif yapılar olarak da kullanabilirsiniz (@ blah238'in bağlantısı verimlilik farklılıkları hakkında oldukça açık olsa da), aynı zamanda jeneratörler, yineleyiciler ve bu yapıları python'da çalıştırmak için her türlü harika, hızlı, verimli araçlar da vardır. Python geliştiricilerinden Raymond Hettinger, her çeşit harika Python içeriğine sahip. Bu video güzel bir örnek .

Ayrıca, @ blah238'in çoğullamalı işleme konusundaki fikrini eklemek için, IPython içinde yazıyor / yürütüyorsanız (yalnızca "normal" python ortamı değil), birden fazla çekirdeği kullanmak için "paralel" paketini kullanabilirsiniz. Ben bu şeyler ile hiçbir whiz değilim, ama çok işlemli şeyler biraz daha üst düzey / acemi dostu bulmak. Muhtemelen gerçekten sadece orada bir kişisel din meselesi, bu yüzden bir tuz tanesi ile alın. Bu videoda 2:13:00 'dan başlayarak iyi bir genel bakış var . Tüm video genel olarak IPython için harika.

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.