2015-09-04 91 views
0

因此,所選擇的值之間要計算中值。使用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"] 

打算以後使用,現在並不重要。

+0

只是萬一你沒有意識到它有一個[gis.se]堆棧交換與許多ArcPy的問題已經回答了它。 – PolyGeo

回答

1

將值附加到空數組,然後計算該數組的平均值。例如:

# 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 

第二部分是不必要的,但可以利用面向對象的編程的,並且可以在該膨脹整個計劃。