Jak mogę wykorzystać tablice NumPy do optymalizacji geoprzetwarzania dużych zbiorów danych?

16

Chciałbym nauczyć się korzystać z tablic NumPy w celu optymalizacji geoprzetwarzania. Duża część mojej pracy dotyczy „dużych zbiorów danych”, w których geoprzetwarzanie często zajmuje kilka dni, aby zrealizować określone zadania. Nie trzeba dodawać, że jestem bardzo zainteresowany optymalizacją tych procedur. ArcGIS 10.1 ma wiele funkcji NumPy, do których można uzyskać dostęp za pomocą arcpy, w tym:

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

Na przykład, powiedzmy, że chcę zoptymalizować następujący intensywny przepływ pracy przy użyciu tablic NumPy:

wprowadź opis zdjęcia tutaj

Ogólna idea polega na tym, że istnieje ogromna liczba punktów opartych na wektorze, które poruszają się zarówno w operacjach wektorowych, jak i rastrowych, co powoduje powstanie binarnego zbioru danych całkowitych rastrowych.

Jak mogę włączyć tablice NumPy, aby zoptymalizować ten typ przepływu pracy?

Aaron
źródło
2
Do Twojej wiadomości, istnieje również funkcja NumPyArrayToRaster i funkcja FeatureClassToNumPyArray .
blah238
2
W blogu „ Wieloprocesowość z ArcGIS” można znaleźć przydatne informacje. Możesz być także zainteresowany innymi pytaniami dotyczącymi wielu procesów .
blah238
3
Wydaje mi się, że zanim pomyślisz o użyciu Numpy w ArcPy, musisz najpierw zrozumieć, jakie korzyści oferują tablice NumPy w porównaniu z listami Python. Zakres Numpy jest znacznie szerszy niż ArcGIS.
gen
2
@ gen, ta odpowiedź StackOverflow wydaje się całkiem dobrze podsumować.
blah238
3
Nawiasem mówiąc

Odpowiedzi:

3

Myślę, że sedno tego pytania polega na tym, które zadania w twoim przepływie pracy nie są tak naprawdę zależne od ArcGIS? Oczywistymi kandydatami są operacje tabelaryczne i rastrowe. Jeśli dane muszą zaczynać się i kończyć w formacie gdb lub innym formacie ESRI, musisz dowiedzieć się, jak zminimalizować koszty tej zmiany formatu (tj. Zminimalizować liczbę podróży w obie strony), a nawet uzasadnić - po prostu może to być zbyt drogi do racjonalizacji. Inną taktyką jest wcześniejsze zmodyfikowanie przepływu pracy w celu korzystania z przyjaznych dla Pythona modeli danych (na przykład, jak szybko można porzucić wielokąty wektorowe?).

Aby echo @gene, chociaż numpy / scipy są naprawdę świetne, nie zakładaj, że są to jedyne dostępne podejścia. Możesz również używać list, zestawów, słowników jako struktur alternatywnych (chociaż link @ blah238 jest dość jasny na temat różnic wydajności), są też generatory, iteratory i wszelkiego rodzaju inne świetne, szybkie i wydajne narzędzia do pracy z tymi strukturami w Pythonie. Raymond Hettinger, jeden z programistów Pythona, ma wiele świetnych ogólnych treści w Pythonie. Ten film jest dobrym przykładem .

Ponadto, aby dodać do pomysłu @ blah238 dotyczącego przetwarzania multipleksowanego, jeśli piszesz / wykonujesz w IPython (nie tylko w „zwykłym” środowisku python), możesz użyć ich „równoległego” pakietu do wykorzystania wielu rdzeni. Nie jestem świstem z tymi rzeczami, ale uważam, że są one nieco wyższe / przyjazne dla początkujących niż rzeczy wieloprocesowe. Prawdopodobnie tak naprawdę jest to kwestia religii osobistej, więc weź to z odrobiną soli. W tym filmie jest dobry pogląd na ten temat od 2:13:00 . Cały film jest świetny dla IPython w ogóle.

Roland
źródło