NumPy配列を使用してビッグデータジオプロセシングを最適化するにはどうすればよいですか?


16

NumPy配列を利用してジオプロセシングを最適化する方法を学ぶことに興味があります。私の仕事の多くは「ビッグデータ」に関係しており、ジオプロセシングでは特定のタスクを完了するのに数日かかることがよくあります。言うまでもなく、これらのルーチンを最適化することに非常に興味があります。ArcGIS 10.1には、arcpyを介してアクセスできる次のような多くのNumPy関数があります。

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

例として、NumPy配列を利用した次の処理集中型ワークフローを最適化するとします。

ここに画像の説明を入力してください

ここでの一般的な考え方は、ベクトルとラスタベースの操作の両方を移動する膨大な数のベクトルベースのポイントがあり、その結果バイナリ整数ラスタデータセットが得られるということです。

このタイプのワークフローを最適化するためにNumPyアレイをどのように組み込むことができますか?



2
マルチプロセッシングのArcGISでのブログの記事は、ここで適用される場合がありますいくつかの良い情報を持っています。他のマルチプロセッシングの質問にも興味があるかもしれません。
blah238

3
ArcPyでNumpyを使用することを考える前に、NumPy配列がPythonリストよりも優れている点を最初に理解する必要があるように思えます。Numpyの範囲は、ArcGISよりもはるかに広いです。
遺伝子

2
@gene、このStackOverflowの答えは、かなりうまくまとめているようです。
blah238

3
あなたはまた、Hadoopのに興味がある場合はさておきとして、あまりにも-この中でチェックアウトビッグ(空間)データ開発の価値がある映像とでHadoopのためのGISツール
PolyGeo

回答:


3

ここでの質問の核心は、ワークフロー内のどのタスクが実際にArcGISに依存していないかだと思います。明らかな候補には、表形式およびラスター操作が含まれます。データがgdbまたは他のESRI形式内で開始および終了する必要がある場合、この再フォーマットのコストを最小化する方法(つまり、往復回数を最小化する方法)を把握する必要があります。合理化するには費用がかかります。もう1つの方法は、Pythonに適したデータモデルを以前に使用するようにワークフローを変更することです(たとえば、ベクターポリゴンをどれだけ早く捨てることができますか?)。

@geneをエコーするには、numpy / scipyは本当に優れていますが、これらが利用可能な唯一のアプローチであると想定しないでください。リスト、セット、辞書を代替構造として使用することもできますが(@ blah238のリンクは効率の違いについてはかなり明確ですが)、ジェネレーター、イテレーター、およびこれらの構造をPythonで操作するためのその他のあらゆる種類の高速で効率的なツールもあります。Python開発者の1人であるRaymond Hettingerは、あらゆる種類の優れた一般的なPythonコンテンツを公開しています。このビデオは良い例です。

また、多重化処理に関する@ blah238のアイデアに追加するために、IPython内(「通常の」Python環境だけでなく)で書き込み/実行している場合、複数のコアを活用するために「パラレル」パッケージを使用できます。私はこのようなことを気にすることはありませんが、マルチプロセッシングのものよりも少し高レベル/初心者向けです。おそらく本当にそこの個人的な宗教の問題なので、一粒の塩でそれを取ってください。このビデオの2:13:00から始まる概要については、良い概要があります。ビデオ全体は、一般的にIPythonに最適です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.