考慮下面的代碼:一旦條件失敗就停止查找運行平均值?
sub = [767220, 769287, 770167, 770276, 770791, 770835, 771926, 1196500, 1199789, 1201485, 1206331, 1206467, 1210929, 1213184, 1213204, 1213221, 1361867, 1361921, 1361949, 1364886, 1367224, 1368005, 1368456, 1368982, 1369000, 1370365, 1370434, 1370551, 1371492, 1471407, 1709408, 1710264, 1710308, 1710322, 1710350, 1710365, 1710375]
avg = []; final = []
def runningMean(seq, n=0, total=0): #function called recursively
if not seq:
return []
total =total+int(seq[-1])
return runningMean(seq[:-1], n=n+1, total=total) + [total/float(n+1)]
def main():
avg = runningMean(sub,n = 0,total = 0) #function call to obtain running mean starting from last element in the list i,e 1710375
print avg
for i in range(len(sub)):
if (int(sub[i]) > float(avg[i] * 0.9)): #checking the condition
final.append(sub[i])
print final
if __name__ == '__main__':
main()
輸出由runningmean &子列表列表的不滿足條件:
[1282960.6216216215, 1297286.75, 1312372.4571428571, 1328319.6764705882, 1345230.0909090908, 1363181.3125, 1382289.2580645161, 1402634.7, 1409742.7931034483, 1417241.142857143, 1425232.111111111, 1433651.3846153845, 1442738.76, 1452397.5, 1462798.0869565217, 1474143.2727272727, 1486568.142857143, 1492803.2, 1499691.7368421052, 1507344.111111111, 1515724.0, 1525005.25, 1535471.9333333333, 1547401.642857143, 1561126.2307692308, 1577136.75, 1595934.1818181819, 1618484.2, 1646032.3333333333, 1680349.875, 1710198.857142857, 1710330.6666666667, 1710344.0, 1710353.0, 1710363.3333333333, 1710370.0, 1710375.0]
[1361867, 1361921, 1361949, 1364886, 1367224, 1709408, 1710264, 1710308, 1710322, 1710350, 1710365, 1710375]
我需要做的是它應該停止的發現是什麼一旦條件不滿足
(sub[i] > float(avg[i] * 0.9))
平均運行I,E的結果應該是:
[1680349.875, 1710198.857142857, 1710330.6666666667, 1710344.0, 1710353.0, 1710363.3333333333, 1710370.0, 1710375.0]
[1709408, 1710264, 1710308, 1710322, 1710350, 1710365, 1710375]
如果任何人都可以在python中爲此提出解決方案,這將有所幫助。
你的移動平均算法是不正確的,我不認爲。基本上,每個結果都是當前值的平均值,以及所有跟隨它的值,均等。以前的值被忽略。雖然這不是一個真正的答案,所以我將它作爲評論留下。 – Blckknght
@Blckknght我的運行平均算法正常工作,我找到從列表的最後一項開始的運行平均值,例如:1710375運行平均值爲-1710375.0,接下來爲(1710365 + 1710375)/ 2 == 1710370.0等等 –
OK ,只是想確保這真的是你想要的。當你把它描述成「跑步的平均水平」時,這並不是我期望的第一件事。 – Blckknght