11、convolve函数:卷积

教材上有这样一句话:“简单移动平均线只不过是计算与等权重的指示函数的卷积。”又表明,“卷积定义为一个函数与经过翻转和平移的另一个函数的乘积的积分。”

那么,卷积到底是什么呢?具体可以参考这篇博客:https://www.cnblogs.com/delphi-xe5/p/11373199.html。从物理状态而言,卷积是为了更好地从时间和空间上全局地去解释结果。

np.convolve(a, v, mode=‘full’),这是numpy函数中的卷积函数库。a和v表示的是两个输入的一维数组,即信号。其mode有三种形式,full、same、valid,顾名思义,full即表示卷积的全部影响都需要写出来(包含边际效应),valid则只把所有信号都作用到的影响范围写出来,same的意思应该是和原数组的元素数一致,即两个输入数组为M和N的话,则same把最大的那个数值作为自身的长度。

读下图所示的代码和数字的计算公式,请把数组a当作是输入信号,把数组b当作是信号随时间的权重,从上文博客中学到的翻转和平移,在这边就能很好地加以运用了。

图1 convolve的介绍

利用信号处理技术计算简单移动平均线:与1/N的权重进行卷积运算。

图2 计算简单移动平均

指数移动平均值的求解:

图3 指数移动平均线

布林带的使用:在简单移动平均的基础上加入上轨和下轨:

图4 布林带释义
图5 布林带代码

注:教材上将std自行用公式求解了,本质公式是一致的。另外教材上利用np.fill函数取了sma[i-N-1]的值作为average,这点让我很疑惑;另外,选择dev数组的时候,是从第5个元素向后取的,也是一个困惑点。因为我们做移动平均,用的是0-4元素为一组的嘛。私以为上面截图写的才是对的,教材看看就好。

你可能感兴趣的:(11、convolve函数:卷积)