我正在尝试用Python 3编写一个程序,计算连续值之间绝对差值的平均值。
答案 0 :(得分:6)
编辑:代码已从问题中删除,更新答案,将代码问题移至底部。
如注释中所示,您可以使用enumerate()
来获取索引以及数组中的元素,然后使用它来计算平均值。示例 -
>>> def absolute_difference(v):
... sum_diff = 0
... for i,x in enumerate(v):
... if i+1 < len(v):
... sum_diff += abs(v[i+1] - x)
... r = sum_diff/len(v)
... return r
...
>>> absolute_difference([4.0, 4.2, 4.1, 4.4, 4.3])
0.1400000000000004
代码中的许多问题(您似乎已删除) -
为什么要将绝对差异转换为float
?浮动数学是不准确的,你可以从你的代码中的差异总和看出 - 0.20000000000000018
。在您的情况下,您不需要将它们转换为浮动。
发生0.0
r
的主要问题是因为您使用//
来划分,//
将划分截断为最接近的整数,所以潜水{ {1}}比使用7.0
更严重的内容会导致//
。示例 -
0.0
对于您的情况,您应该使用>>> 7.0 // 8.0
0.0
>>> 7.0/8.0
0.875
进行划分。
你在循环的每次迭代中取平均值,虽然这不是问题,但可能并不完全需要。如果你不想在循环的每次迭代中取平均值,你应该在循环之外缩进它。
答案 1 :(得分:1)
您正在使用//
,这意味着在python 3
那是
<强>即)强>
2/4 =0.5
2//4=0
在计算r
时,只需将//
替换为/
答案 2 :(得分:0)
这是另一种方法:
def absolute_difference(values):
last = values[0]
total = 0
for value in values[1:]:
total += abs(value - last)
last = value
return total/(len(values)-1)
print('{:.5f}'.format(absolute_difference([4.0, 4.2, 4.1, 4.4, 4.3])))
给出答案:0.17500
答案 3 :(得分:0)
另外,为防止None
出现在最后,您必须在定义的末尾加return
。如果您将另一个变量“等于”(=
)定义,则会发生这种情况。这在其他帖子中有所体现,但我说这只是为了突出显示内容。