Python中绝对差异的平均值

时间:2015-09-07 07:09:51

标签: python python-3.x

我正在尝试用Python 3编写一个程序,计算连续值之间绝对差值的平均值。

4 个答案:

答案 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

代码中的许多问题(您似乎已删除) -

  1. 为什么要将绝对差异转换为float?浮动数学是不准确的,你可以从你的代码中的差异总和看出 - 0.20000000000000018。在您的情况下,您不需要将它们转换为浮动。

  2. 发生0.0 r的主要问题是因为您使用//来划分,//将划分截断为最接近的整数,所以潜水{ {1}}比使用7.0更严重的内容会导致//。示例 -

    0.0

    对于您的情况,您应该使用>>> 7.0 // 8.0 0.0 >>> 7.0/8.0 0.875 进行划分。

  3. 你在循环的每次迭代中取平均值,虽然这不是问题,但可能并不完全需要。如果你不想在循环的每次迭代中取平均值,你应该在循环之外缩进它。

答案 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。如果您将另一个变量“等于”(=)定义,则会发生这种情况。这在其他帖子中有所体现,但我说这只是为了突出显示内容。