鄙人学习笔记,这个笔记以例子为主。
开发工具:Spyder
卷积convolve
卷积可以解决类似效果累积这种问题。比如,12月15日数据和14日、13日、12日….等前些天的数据都有关系,这时则可以用卷积。
- 卷积的计算过程
设有数组a和卷积核数组b:
a = [1, 2, 3, 4, 5]
b = [8, 7, 6]
使用b作为卷积核数组对a数组执行卷积运算的过程如下:
完全卷积:卷积核数组中只要有一个开始生效,就可以开始得到结果。
同维卷积:卷积核的中心元素(7)开始生效时,就是同维卷积结果的开始,卷积核的中心元素(7)最后生效得到的数值,就是同维卷积结果的结束。同维卷积得到结果中元素的个数和原数组中元素的个数相等。[故,若要得到同维卷积结果,则卷积核数组只能含有奇数个元素,且同维卷积的结果和卷积核的中心元素大小关系最大]
有效卷积:卷积核数组中,必须所有元素均生效,才开始得到结果。
PS:卷积核数组有一个不成文的规定,就是:其元素要对称,比如,可以设置为:[1 2 3 2 1].
相关函数:
c = numpy.convolve(a, b, “卷积类型”)
- 例子
代码:
# -*- coding: utf-8 -*-
import sys
import numpy as np
import datetime as dt
import matplotlib.pyplot as mp
import matplotlib.dates as md
#sys.path.append("C:\\Users\\goatbishop\\Desktop\\data")
#print(sys.path[-1])
def time2time(yt):
yt = str(yt, encoding='utf-8')
nt = dt.datetime.strptime(yt, '%Y/%m/%d').date()
t = nt.strftime('%Y-%m-%d')
return t
dates, AQI, PM25 = np.loadtxt(
r'C:\Users\goatbishop\Desktop\data\data01.csv',
delimiter = ',',
usecols = tuple(range(3)),
unpack = True,
skiprows=1,
dtype = 'M8[D], f8, f8',
converters = {0:time2time})
print(dates.shape)
print(dates, dates.dtype)
dates = dates.astype(md.datetime.datetime)
kernel = np.ones(3)/3
AQI_2 = np.convolve(AQI, kernel, 'valid')
print(AQI_2, AQI_2.shape)
mp.figure("Figure AQI", facecolor='lightgray' )
mp.title("AQI Sequence Diagrams", fontsize = 16)
mp.xlabel("Date", fontsize = 14)
mp.ylabel("AQI", fontsize = 14)
mp.grid(linestyle = ":")
mp.plot(dates, AQI,
color = 'dodgerblue', linestyle = '--',
label = "AQI")
mp.plot(dates[2:], AQI_2,
color = 'r', linestyle = ':',
linewidth = 6,
label = "AQI(3)")
ax = mp.gca()
ax.xaxis.set_major_locator(
md.WeekdayLocator(byweekday=md.SU))
ax.xaxis.set_major_formatter(
md.DateFormatter('%d %b %Y'))
ax.xaxis.set_minor_locator(md.DayLocator())
mp.legend(loc = 0)
mp.show()
结果: