numpy基础(part5)--卷积

鄙人学习笔记,这个笔记以例子为主。
开发工具: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()


结果:

发布了141 篇原创文章 · 获赞 24 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/m0_37422217/article/details/105181196