使用numpy,arcpy的多边形要素类的平均中心

时间:2017-07-12 19:19:03

标签: python arrays numpy mean arcpy

我的任务是使用numpy数组查找要素类的平均中心。我使用

从要素类创建了一个numpy数组
import arcpy
import numpy
fc = "polygons.shp"
a = arcpy.da.FeatureClassToNumPyArray(fc, ["SHAPE@X", "SHAPE@Y"])

数组a,然后是:

array([( 3107178.29076947,  10151024.31186805),
       ( 3107961.30479125,  10139810.52458512),
       ( 3109603.8882401 ,  10119654.26424824),
       ( 2992362.40598316,  10049723.50515586),
       ....
       ( 3114517.82381449,  10071634.68261757)],
       dtype=[('SHAPE@X', '<f8'), ('SHAPE@Y', '<f8')])

是fc中每条记录的质心(X,Y)。如何获得这些的meanX和meanY,以便输出([(mean.X,mean.Y)])?我已按照here所述尝试使用以下内容:

numpy.mean(a, axis=0)

但我得到了X值的平均值。在arcpy.da函数之后是否有一些额外的步骤来改变dtype以成功获得mean.X,mean.Y值?我必须使用numpy mean函数来做到这一点。谢谢!

3 个答案:

答案 0 :(得分:2)

np.mean(a.view((float, len(a.dtype.names))), axis=0)

答案 1 :(得分:1)

meanxy=[np.mean(y) for y in zip(*a)]

*收集元组中的所有位置参数

答案 2 :(得分:0)

或许有点过分,但是对于来自功能类的结构化和/或重组,您应该注意存在的数据类型的混合。如果完成了对float的覆盖扩展,则整数,浮点和字符串的混合将导致错误。建议您可以同时对单个字段或特定字段执行实际计算。 考虑一个只有以下dtype的要素类:

a.dtype.names =('ID','X','Y','Z')

平均'ID'是无用的......但是,3D坐标的平均值可能是。要获得这些坐标的平均值,您可以将它们作为单例来完成。

    a['X'].mean(), a['Y'].mean(), a['Z'].mean()
    (74047.105809675646, -3466195.1836807081, 418.45351408062925)

或作为一批未知长度的花车

[a[i].mean() for i in a.dtype.names if a[i].dtype.kind in ('f', 'float')]

产生与元组相同的

 [74047.105809675646, -3466195.1836807081, 418.45351408062925]

并确保你记住什么价值......

   [(i, a[i].mean()) for i in a.dtype.names if a[i].dtype.kind in ('f', 'float')]

[('X', 74047.105809675646),
 ('Y', -3466195.1836807081),
 ('Z', 418.45351408062925)]