使用ArcPy Statistics_analysis计算平均值,in_memory
问题描述:
因此,所选择的值之间要计算中值。使用ArcPy Statistics_analysis计算平均值,in_memory
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")
从选择cities_lyr想从YrBlt
with arcpy.da.SearchCursor(luLoc, ["[email protected]", "[email protected]", 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')
这里计算平均值场。问题是: 我只是想看到的平均值,我该怎么办呢?
luFields = ["MedYrBlt","MedVal","OCCount"]
打算以后使用,现在并不重要。
答
将值附加到空数组,然后计算该数组的平均值。例如:
# 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
第二部分是不必要的,但可以利用面向对象的编程的,并且可以在该膨胀整个计划。
只是万一你没有意识到它有一个[gis.se]堆栈交换与许多ArcPy的问题已经回答了它。 – PolyGeo