来自Numpy阵列的PySAL自然休息


11

我正在尝试使用Python从栅格中提取自然中断值。

预期的过程进行如下:将Arcpy栅格对象转换为NumPy Array(使用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:矩阵必须为二维”。

据我所知,greenArray是一个二维数组。


1
在尝试使用Natural_Breaks处理greenArray尺寸之前,您是否尝试过检查它的尺寸?看起来像在数组上调用.shape将为您提供数组尺寸。我之前没有做过任何事情,但是这篇文章似乎很有帮助... stackoverflow.com/questions/3061761/numpy-array-dimensions
Branco 2014年

1
谢谢,布兰科。我确实碰到了那个线程,这使我相信我的数组是二维的。返回的greenArray.shape =(1536,2048)和greenArray.ndim =2。我想我想出了一个解决方案(使用numpy.ravel()),我将在不久后写下。
韧皮部2014年

1
@phloem查看PySAL docco,我认为使用flatten和是正确的ravel;的Natural_Breaks出现为仅接受值的一维向量(或者,一个(n, 1)向量)。
om_henners 2014-09-25

Answers:


6

感谢Branco和om_henners的帮助。

我的问题的答案似乎是使用numpy.ravel()将arcpy.RasterToNumPy()生成的数组更改为一维数组:

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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.