我正在尝试使用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年
谢谢,布兰科。我确实碰到了那个线程,这使我相信我的数组是二维的。返回的greenArray.shape =(1536,2048)和greenArray.ndim =2。我想我想出了一个解决方案(使用numpy.ravel()),我将在不久后写下。
—
韧皮部2014年
@phloem查看PySAL docco,我认为使用
—
om_henners 2014-09-25
flatten
和是正确的ravel
;的Natural_Breaks
出现为仅接受值的一维向量(或者,一个(n, 1)
向量)。