总结

使用递归和循环两种方法来完成

python环境下循环相比于递归更快,更适应极端样本情况

递归

def _ema(arr,i=None):

N = len(arr)

α = 2/(N+1) #平滑指数

i = N-1 if i is None else i

if i==0:

return arr[i]

else:

data = 0

data += (α*arr[i]+(1-α)*EMA(arr,i-1)) #递归公式

return data

循环

def _ema(arr):

N = len(arr)

α = 2/(N+1)

data = np.zeros(len(arr))

for i in range(len(data)):

data[i] = arr[i] if i==0 else α*arr[i]+(1-α)*data[i-1] #从首开始循环

return data[-1]

主体

def EMA(arr,period=21):

data = np.full(arr.shape,np.nan)

for i in range(period-1,len(arr)):

data[i] = _ema(arr[i+1-period:i+1])

return data

耗时

样本为900长度的numpy.array:

递归保持在2.5ms附近,循环在1ms以内

当样本达到5000时

递归超过10ms,循环5ms左右

样本

python默认递归极限为1000,若样本数超过1000,则需要调高递归极限

import sys

sys.setrecursionlimit(10000)

调高递归极限至10000

引用

Pandas(1.0.1)和talib对比

总结

talib计算一维样本速度快的令人发指…但是缺点是面对多维样本只能通过循环

pandas一维下虽然速度不及talib,但是10000的长度也只插了3ms左右,而且面对多维样本可以一步到位

Talib

import talibarr

data = talib.EMA(arr,timeperiod=21)

Pandas

import pandas as pd

def EMA(arr,period=21):

df = pd.DataFrame(arr)

return df.ewm(span=period,min_periods=period).mean()

引用

原文链接:https://blog.csdn.net/cRexxar/article/details/105532398

python 移动平均线_Python 计算EMA(指数移动平均线)相关推荐

  1. Python 计算EMA(指数移动平均线)

    总结 使用递归和循环两种方法来完成 python环境下循环相比于递归更快,更适应极端样本情况 递归 def _ema(arr,i=None):N = len(arr) α = 2/(N+1) #平滑指 ...

  2. EMA(指数移动平均)及其深度学习应用

    在深度学习中,经常会使用EMA(指数移动平均)这个方法对模型的参数做平均,以提高测试指标并增加模型鲁棒. 1.基于数学的介绍 1.1 公式例子 我们有关于"温度-天数"的数据 :在 ...

  3. 使用python根据身高体重计算BMI指数

    #python(day01) 根据身高.体重计算BMI指数 创建两个变量:一个用于计算身高(单位:米),一个用来记录体重(单位:千克),根据公式"BMI=体重/(身高*身高)",代 ...

  4. EMA - 指数移动平均

    EMA 基本概念见 Wikipedia,本文不赘述. 基本公式 S[0] = Y[0] S[i] = Y[i] * alpha + S[i-1] * (1 - alpha) 其中 alpha 为平滑因 ...

  5. python 大气污染物模型_Python AQI空气污染指数数据分析与机器学习

    导入模块 import numpy as np import pandas as pd import datetime import matplotlib as mpl import matplotl ...

  6. 用python写一段计算autocad多段线长度的代码

    答:# 请在下面输入代码.import math#获取多段线的点坐标 points = [(1,1), (2,1), (2,2), (3,2)]#计算多段线的长度 length = 0 for i i ...

  7. python判断天数_Python计算两个日期相差天数的方法示例

    本文实例讲述了Python计算两个日期相差天数的方法.分享给大家供大家参考,具体如下: #!/usr/bin/python import time import sys def dateinput() ...

  8. python离散积分_python 计算离散点的微分和积分(超详细)

    前言: 本文计算离散点微分和积分的内容,参考的是origin软件提供的算法. 鉴于在百度和谷歌搜索标题的结果不尽人意,因此想在此做一个详细的总结. 若阅读时间有限,可直接阅读第二或第三部分的代码及其运 ...

  9. python 画三角函数_Python计算三角函数之asin()方法的使用

    asin()方法返回x的反正弦,以弧度表示. 语法 以下是asin()方法语法: asin(x) 注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math的静态对象来调用这个函数 ...

最新文章

  1. 生信分析-TBtools绘制热图
  2. leetcode怎么用时间刷_LeetCode刷题专栏第一篇--思维导图时间安排
  3. 126篇殿堂级深度学习论文分类整理 从入门到应用(下)
  4. python os.access_os.access(path, mode)
  5. 信息学奥赛一本通C++语言——1022: 整型与布尔型的转换
  6. IDEA2018部署jeesite3完美运行教程
  7. 史上最实用mysql参数之一-----sql_safe_updates
  8. 干货 | 那些高产的学者都是怎样工作的?
  9. 20145325张梓靖 《信息安全系统设计基础》第10周学习总结
  10. linux shell中实现字符串反转的几种简单方法
  11. 干货:IT运维管理规划
  12. HDU-3237 Help Bubu(状压dp)
  13. 华硕笔记本Delete键和Insert键合二为一与分离
  14. Server Tomcat v7.0 Server at localhost failed to start.
  15. 商务办公软件应用与实践【6】
  16. 2021年在vue中使用 Google Map
  17. c++ 中. 和 -,波浪号 ~ 符号怎么用 ————很重要
  18. 苹果地图错误将驾车者导向沙漠:偏离70公里
  19. WiFi未来发展趋势 你知道吗?
  20. 正则表达式匹配电话号码

热门文章

  1. Android自定义未读消息提示View
  2. [健康]治疗偏头痛的六方
  3. 时间工具类(时间戳转换日期date,获取两个时间戳的日期)
  4. 什么是SRM系统?有什么作用?如何应用SRM系统?
  5. ELK 环境搭建 (四)
  6. WorkNC在福田模具的应用
  7. 莱布尼茨步进计算器——不想当发明家的数学家不是好的哲学家
  8. flexnet许可证服务器_使用rrdtool进行Flexnet许可证监视
  9. highcharts入门之Pie:如何让Pie饼状图的图例内显示百分比(转)
  10. 29岁才转行软件测试,目前31了,我的一些经历跟感受