发布于2019-10-06 18:52 阅读(1101) 评论(0) 点赞(19) 收藏(1)
我正在创建一个迭代算法(蒙特卡罗方法)。该算法在每次迭代时都会返回一个值,从而创建一个值流。
我需要分析这些值并在1000
返回的值包含一些值时停止算法epsilon
。
我决定实现其计算max
和min
最后的值1000
值,然后计算出error
使用这个公式(max-min)/min
,并把它比作epsilon
:error<=epsilon
。如果达到此条件,请停止迭代并返回结果。
第一个想到的想法是在其上使用list
和append
新值,max
并在每次附加后计算min
其最后1000
值的和值。
然后,我决定不再保留1000
最后的值。所以我想起了deque
。这是一个非常好的主意,因为在deque
对象两端添加和删除的复杂度为O(1)
。但这并没有解决每次迭代都需要遍历最后1000个值来计算min
和的问题max
。
然后我想起了那里的heapq
模块。它以一种有效地随时返回最小数据的方式来保存数据。但是我需要最小的和最大的。此外,我需要保留元素的顺序,以便保留1000
算法最后返回的元素,而且我看不到如何使用来实现heapq
。
考虑到所有这些想法后,我决定在这里问:
如何最有效地解决此任务?
如果您有空/愿意更改其定义error
,则可能要考虑使用variance
代替(max-min)/min
。
您可以增量计算方差。的确,使用此方法,您不会从流中删除任何值-差异将取决于所有值。但是那又怎样呢?有了足够的值,前几个对方差就不会有太大的影响,而variance/n
当足够的值围绕某个固定值聚集时,平均值的方差将变小。
因此,您可以选择在时停止variance/n < epsilon
。
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/131840/f64e265a3707c1ae1b41/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!