程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

更改列表的最后1000个值的最小值和最大值

发布于2019-10-06 18:52     阅读(1101)     评论(0)     点赞(19)     收藏(1)


我正在创建一个迭代算法(蒙特卡罗方法)。该算法在每次迭代时都会返回一个值,从而创建一个值流。

我需要分析这些值并在1000返回的值包含一些值时停止算法epsilon

我决定实现其计算maxmin最后的值1000值,然后计算出error使用这个公式(max-min)/min,并把它比作epsilonerror<=epsilon如果达到此条件,请停止迭代并返回结果。

  1. 第一个想到的想法是在其上使用listappend新值,max在每次附加后计算min其最后1000

  2. 然后,我决定不再保留1000最后的值。所以我想起了deque这是一个非常好的主意,因为在deque对象两端添加和删除的复杂度O(1)但这并没有解决每次迭代都需要遍历最后1000个值来计算min和的问题max

  3. 然后我想起了那里的heapq模块它以一种有效地随时返回最小数据的方式来保存数据。但是我需要最小的和最大的。此外,我需要保留元素的顺序,以便保留1000算法最后返回的元素,而且我看不到如何使用来实现heapq

考虑到所有这些想法后,我决定在这里问:

如何最有效地解决此任务?


解决方案


如果您有空/愿意更改其定义error,则可能要考虑使用variance代替(max-min)/min

您可以增量计算方差的确,使用此方法,您不会从流中删除任何值-差异将取决于所有值。但是那又怎样呢?有了足够的值,前几个对方差就不会有太大的影响,而variance/n当足够的值围绕某个固定值聚集时,平均值的方差将变小。

因此,您可以选择在时停止variance/n < epsilon



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/131840/f64e265a3707c1ae1b41/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

19 0
收藏该文
已收藏

评论内容:(最多支持255个字符)