一维卷积convolve及其示例

卷积是一种数学运算
应用场景:图像识别、卷积神经网络
本质:计算当前数值时,与之前的数值有关联,需要与之前的数值衰减后的量叠加

一维卷积

一维卷积运算过程

a = [1,2,3,4,5]	#源数组
b = [8,7,6]	#卷积核

#使用 b作为卷积核对a数组执行卷积运算的过程如下:
#数据准备:
0  0  1  2  3  4  5  0  0    #排一下源数组
6  7  8  #将卷积核 6 7 8与对应的 0  0  1相乘再相加,得到的结果 8 记在源数组的上面  

#计算:
	   44 65 86					#有效卷积(value):6这个元素对最终值产生影响时称为有效卷积
   	23 44 65 86 59 30				#同维卷积(same):7这个元素对最终值产生影响时称为同维卷积
      8 23 44 65 86 59 30				#这个技术称为完全卷积(full)
0  0  1  2  3  4  5  0  0				
6  7  8 	
   6  7  8		#将卷积核 6 7 8与对应的 0  1  2相乘再相加,得到的结果 23记在源数组的上面(本质是本次的计算累加了前面计算的缩减)
      6  7  8		#继续上面的计算
         6  7  8	#继续上面的计算
            6  7  8
               6  7  8

API

c = numpy.convolve(a,b,卷积类型)

实例1:基于卷积运算实现股票5日移动平均线

假设closing_prices是已知的收盘价数组,dates是已知的日期数组

import numpy as np
import matplotlib as mp

#生成卷积核: 5个 1/5,表示每天股价的权重相同
kernel = np.ones(5)/5
np.convolve(closing_prices,kernel,'valid')
#绘图
mp.plot(dates[4:],ma52,color='orangered',linewidth=7,alpha=0.5,label='MA5')
mp.legend()
mp.gcf().autofmt_xdate()
mp.show()

实例2:加权卷积:加权5日移动平均线

#通过以e为底的幂函数生成权重(即卷积核):[0.36 0.47 0.607 0.779]
kernel = np.exp(np.linspace(-1,0,5))
#卷积自己的运算规则,需要将卷积核翻转一下
kernel = kernel[::-1]
#对卷积核做归一化,使各个权重之和等于1
kernel /= kernel.sum()

ma53 = np.convolve(closing_prices,kernel,'valid')
 #绘图
 mp.plot(dates[4:],ma53,color='limegreen',linewidth=7,alpha=0.5,label='MA5-2')
 mp.legend()
 mp.gcf().autofmt_xdate()
 mp.show()

你可能感兴趣的:(算法)