我需要知道一组数字与一组数字相比是否超出了平均值的1 stddev等.
我正在创建一个迭代算法(蒙特卡罗方法).该算法在每次迭代时返回一个值,从而创建一个值流.
我需要分析这些值并在说1000返回的值有些时停止算法epsilon.
我决定实现其计算max和min最后的值1000值,然后计算出error使用这个公式(max-min)/min,并把它比作epsilon:error<=epsilon.如果达到此条件,请停止迭代并返回结果.
第一个hare-brained想法是使用a list和appendnew值,计算每次追加后的最后一个值的值max和min值1000.
然后我决定不再保留更多的1000最后价值.所以我记得deque.这是一个非常好的主意,因为在deque对象的两端添加和删除的复杂性是O(1).但是它并没有解决需要在每次迭代中计算min和计算所有最后1000个值的问题max.
然后我记得那里有heapq模块.它使数据保持在每时每刻高效返回最小数据的方式.但我需要最小和最大的.此外,我需要保留元素的顺序,以便我可以保留1000算法的最后返回元素,我不知道如何实现它heapq.
考虑到所有这些想法,我决定在这里问:
如何最有效地解决此任务?
我有很多数据存储在大型数组的磁盘上.我无法将所有内容完全加载到内存中.
如何计算平均值和标准差?
数据:
{'Open': {0: 159.18000000000001, 1: 157.99000000000001, 2: 157.66, 3: 157.53999999999999, 4: 155.03999999999999, 5: 155.47999999999999, 6: 155.44999999999999, 7: 155.93000000000001, 8: 155.0, 9: 157.72999999999999},
'Close': {0: 157.97999999999999, 1: 157.66, 2: 157.53999999999999, 3: 155.03999999999999, 4: 155.47999999999999, 5: 155.44999999999999, 6: 155.87, 7: 155.0, 8: 157.72999999999999, 9: 157.31}}
Run Code Online (Sandbox Code Playgroud)
码:
import pandas as pd
d = #... data above.
df = pd.DataFrame.from_dict(d)
df['Close_Stdev'] = pd.rolling_std(df[['Close']],window=5)
print df
# Close Open Close_Stdev
# 0 157.98 159.18 NaN
# 1 157.66 157.99 NaN
# 2 157.54 157.66 NaN …Run Code Online (Sandbox Code Playgroud)