我正在尝试在Python 3中编写一个程序,它计算连续值之间绝对差值的平均值。Python中绝对差异的均值
回答
当编辑:由于代码已从问题中删除,请更新答案,将代码移至底部。
如评论中给出的,您可以使用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
的主要问题,//
截断划分为最接近的整数,所以潜水7.0
的东西刨丝器比使用//
总会导致0.0
。示例 ->>> 7.0 // 8.0 0.0 >>> 7.0/8.0 0.875
对于你的情况,你应该使用划分
/
。您在循环的每次迭代中都采用了均值,但这不是问题,可能不是完全需要的。如果你不想在循环的每次迭代中使用mean,你应该在循环外部缩进它。
OP需要成对的值,因此正在使用索引。他们应该'枚举',或者可以使用'itertools'中的['pairwise'](https://docs.python.org/2/library/itertools.html#recipes)配方。 –
是的,好主意。更新了答案。 –
您正在使用//
这意味着在python整数除法3
即
即)
2/4 =0.5
2//4=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
另外,为了防止None
从末出现,你必须在你的定义到底有return
。如果您将另一个变量“等于”(=
)作为您的定义,则会发生这种情况。这在其他帖子中已经显示,但我只是想强调一下。
- 1. numpy的版本(平均绝对偏差)
- 2. 绝对差值EmguCv
- 3. groupby object pandas的绝对值的均值
- 4. SQL Server DateTime列的差异平均值
- 5. Python中的均方误差
- 6. 处理绝对差异的BOOST_CHECK_CLOSE版本
- 7. 按Python中两列之差的绝对值排序
- 8. Python + Pandas差异的差异
- 9. mongo DB的平均差异
- 10. 评估Oracle中一组数字的平均绝对偏差
- 11. numpy矩阵中的绝对非对角线差异总和
- 12. Python的差异
- 13. Python的差异
- 14. MySQL添加时间值之间的差异来查找平均差异。
- 15. k均值算法中k和质心之间的差异
- 16. 查找与C中平均值差异最小的元素C
- 17. 使用数组取平均值在Excel中的滚动差异?
- 18. PHP运行多个数组值差异的平均值
- 19. 阵列中两个数字之间的最小绝对差异
- 20. Python 3:显示字典的键值对之间的差异
- 21. CNTK绝对误差
- 22. SQL中的平均值和标准差
- 23. 寻找pandas中的timedelta对象的均值和标准差df
- 24. 获得休眠的两个时间戳差异的平均值
- 25. x的平均值的误差线除以y的平均值
- 26. 使用PHP获取日期差异数组的平均值
- 27. 计算与平均值的差异百分比
- 28. 日期差异总和的平均值。MySQL
- 29. Python中央差异索引
- 30. Python的差值
'r = sum_dif //(len(v)-1)'不应该在for循环的范围内。与'/'相反的''是整数除法。在你的例子中使用'/'更有意义,我想 – cel
'//'是整数(“floor”)的分割,例如。 '0.7 // 10'会给你'0.0'。你只需要使用'/'。 – fjarri