Python 在内存中使用ArcPy统计分析计算平均值

Python 在内存中使用ArcPy统计分析计算平均值,python,arcgis,arcpy,Python,Arcgis,Arcpy,因此,在选定的值中,要计算中值 arcpy.env.workspace = r"Database Connections\local.sde" pLoc = "local.DBO.Parcels" luLoc = "local.DBO.Land_Use" luFields = ["MedYrBlt","MedVal","OCCount"] arcpy.MakeFeatureLayer_management(pLoc,"cities_lyr") arcpy.SelectLayerByAttribu

因此,在选定的值中,要计算中值

arcpy.env.workspace = r"Database Connections\local.sde"
pLoc = "local.DBO.Parcels"
luLoc = "local.DBO.Land_Use"
luFields = ["MedYrBlt","MedVal","OCCount"]
arcpy.MakeFeatureLayer_management(pLoc,"cities_lyr")
arcpy.SelectLayerByAttribute_management("cities_lyr", "NEW_SELECTION", "YrBlt > 1000")
从选定的城市\u lyr想要从YrBlt计算平均值字段

with arcpy.da.SearchCursor(luLoc, ["OID@", "SHAPE@", luFields[0], luFields[1], luFields[2]]) as cursor:
   for row in cursor:
      if arcpy.Exists('in_memory/stats'):
        arcpy.Delete_management(r'in_memory/stats')
      arcpy.SelectLayerByLocation_management('cities_lyr', select_features = row[1])
      arcpy.Statistics_analysis('cities_lyr', 'in_memory/stats','YrBlt MEAN','OBJECTID')
这里有一个问题: 我只想看看平均值,我怎么能做到



稍后将要使用的值暂时不重要。

将值附加到空数组,然后计算该数组的平均值。例如:

# Create array & cycle through years, append values to array
yrArray =[]
for row in cursor:
    val = getValue("yrBlt")
    yrArray.append(val)

#get sum of all values in array
x = 0
for i in yrArray: 
    x += i

#get average by dividing above sum by the length of the array. 
meanYrBlt = x / len(yrArray)
另一方面,将这些进程划分为它们自己的类可能是有益的。例如:

class arrayAvg: 
    def __init__(self,array):
        x = 0
        for i in array:
            x += 1
        arrayLength = len(array)
        arrayAvg = x/arrayLength
        self.avg = arrayAvg
        self.count = arrayLength
这样,您可以通过调用以下命令重用代码:

yrBltAvg = arrayAvg(yrArray)
avg = yrBltAvg.avg #returns average
count = yrBltAvg.count #returns count

第二部分是不必要的,但允许您利用面向对象编程,并且您可以在整个程序中扩展它。

如果您不知道,有一个堆栈交换,上面已经回答了许多ArcPy问题。
yrBltAvg = arrayAvg(yrArray)
avg = yrBltAvg.avg #returns average
count = yrBltAvg.count #returns count