Numpy配列からのPySALの自然な中断


11

Pythonを使用して、ラスターから自然なブレーク値を抽出しようとしています。

目的のプロセスは次のとおりです。ArcpyラスターオブジェクトからNumPy配列(RasterToNumPyArrayを使用)から自然ブレーク値(PySAL Natural Breaks関数を使用)。

import arcpy, pysal
from pysal.esda.mapclassify import Natural_Breaks as nb
# code to create greenIndex arcpy Raster object here
greenArray = arcpy.RasterToNumPyArray(greenIndex)
breaks = nb(greenArray,k=2,initial=20)

このコードは、エラー「ValueError:マトリックスは2次元でなければなりません」を返します。

私の知る限り、greenArrayは2次元配列です。


1
Natural_Breaksで処理する前に、greenArrayのディメンションを確認しましたか?配列で.shapeを呼び出すと、配列の大きさがわかります。私はこれのいずれも以前にやったことがありませんが、この投稿は役立つようです... stackoverflow.com/questions/3061761/numpy-array-dimensions
Branco 14

1
ありがとう、ブランコ。私はそのスレッドに出くわしたので、私の配列は2次元であると信じるようになりました。greenArray.shape =(1536,2048)およびgreenArray.ndim = 2の戻り値。解決策(numpy.ravel()を使用)を考え出したと思います。
師部14

1
@phloem私が使用してあなたがしている権利だと思うPySALのdoccoを見てみるflattenravel、はNatural_Breaks、値の1dベクトル(または(n, 1)ベクトル)のみを受け入れるようです。
om_henners 14

回答:


6

助けてくれてありがとう、Brancoとom_henners。

私の問題に対する答えは、numpy.ravel()を使用してarcpy.RasterToNumPy()によって生成された配列を1D配列に変更することです。

import arcpy, pysal
from pysal.esda.mapclassify import Natural_Breaks as nb
# code to create greenIndex arcpy Raster object here
greenArray = arcpy.RasterToNumPyArray(greenIndex)
breaks = nb(greenArray.ravel(),k=2,initial=20)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.