1,滑动窗口

滑动窗口,简单来说,就是以动态的边界限定的一组元素。

2,窗口大小;滑动步长

其中边界限定的大小称为窗口大小,边界变化的幅度称为滑动步长。

窗口大小为5,滑动步长为1的滑动窗口

滑动窗口用在图片定位

def sliding_window(image, window, step):
#第一个 for 循环控制矩形框以 step 的步长在图片中上下移动for y in range(0, image.shape[0] - window[1], step):  #第二个 for 循环控制矩形框以 step 的步长在图中左右移动。for x in range(0, image.shape[1] - window[0], step):#最后通过 yield 生成器返回一个元组#元组的第一个元素 x 和第二个元素 y 表示矩形框左上角的坐标#第三个元素 image[y:y + window[1], x:x + window[0]] 就是处在图片中不同位置的矩形框。yield (x, y, image[y:y + window[1], x:x + window[0]]) #遍历每一个滑动窗口
for (x, y, window) in sliding_window(image, (window_w, window_h), 200):
#使用一个 if 语句来判断获得的滑动窗口和我们设定的滑动窗口大小是否一致
#如果滑动窗口截取的区域与设定的 (window_w, window_h) 中任意一个元素不同,
#则执行 continue 跳过该滑动窗口。if window.shape[0] != window_w or window.shape[1] != window_h:continueclone = image.copy()cv2.rectangle(clone, (x, y), (x + window_w, y + window_h), (0, 255, 0), 2)#OpenCV 图片是以 B,G,R(蓝,绿,红)的通道顺序存储的,而在 Matplotlib 中图片是以 R,G,B 的通道顺序存储,所以我们使用 clone[:,:,::-1] 切片方法来跳转图片通道的顺序clone = clone[:,:,::-1]plt.imshow(clone)plt.pause(0.1) #让每张图片显示暂停一段时间,函数的参数 0.1 表示暂停 0.1 秒。display.clear_output(wait=True)  #清除已经显示的图片为下一张图片显示做准备。

滑动窗口处理数据

参考文章

时间序列预测中的数据滑窗操作

时间预测的原理:将历史数据x预测未来数据y。为了充分利用原始(历史)数据,所以对原始数据集进行滑窗操作

例子(多特征时间序列)。这种数据一般使用在待预测的数据跟多个特征相关性较高的场合中

这是含三个特征的数据集,H( humidity)、PT(pressure)、PE(power)三个特征为预测依据。
取当前和上三个时刻共四个时刻的已知数据对下一时刻的PE(功率)进行预测

那么对于X数据集的滑窗就应该如下图所示

y数据集的滑窗应该如下图所示。y数据集只能是一维

def sliding_window(DataSet, X_width, y_width, gap = 1, multi_vector = None, X_data = True):'''DataSet has to be as a DataFrame'''if X_data:if multi_vector:a,b = DataSet.shapeelse:a = DataSet.shape[0]b = 1c = (a-X_width-y_width-a%gap)/gapX = np.reshape(DataSet.iloc[0:X_width,:].values,(1,X_width,b))for i in range(len(DataSet) - X_width - y_width):i += 1if i > c:breakj = i * gaptmp = DataSet.iloc[j:j + X_width,:].valuestmp = np.reshape(tmp,(1,X_width,b))X = np.concatenate([X,tmp],0)return Xelse:if multi_vector:print('y_data-error:expect 1D ,given %dD'%DataSet.shape[1])return;else:a = DataSet.shape[0]c = (a-X_width-y_width-a%gap)/gapy = np.reshape(DataSet.iloc[X_width:X_width + y_width,0].values,(1,y_width))for i in range(len(DataSet) - X_width - y_width):i += 1if i > c:breakj = i * gap + X_widthtmp = DataSet.iloc[j:j + y_width,:].valuestmp = np.reshape(tmp,(1,y_width))y = np.concatenate([y,tmp])return y

单特征

#DataSet训练数据集
#X_width使用的历史数据长度
#y_width要预测的数据长度
#X_data是否是X数据集
train_X = sliding_window(DataSet, X_width, y_width)
train_y = sliding_window(DataSet, X_width, y_width, X_data = None)

多特征

#DataSet训练数据集
#X_width使用的历史数据长度
#y_width要预测的数据长度
#multi_vector是否为多特征
#X_data是否是X数据集
train_X = sliding_window(DataSet, X_width, y_width, multi_vector = True)
test_y = sliding_window(DataSet, X_width, y_width, multi_vector = True, X_data = None)

单变量输入

def sliding_window(train, sw_width=7, n_out=7, in_start=0):'''该函数实现窗口宽度为7、滑动步长为1的滑动窗口截取序列数据'''data = train.reshape((train.shape[0] * train.shape[1], train.shape[2]))  # 将以周为单位的样本展平为以天为单位的序列X, y = [], []for _ in range(len(data)):in_end = in_start + sw_widthout_end = in_end + n_out# 保证截取样本完整,最大元素索引不超过原序列索引,则截取数据;否则丢弃该样本if out_end < len(data):# 训练数据以滑动步长1截取train_seq = data[in_start:in_end, 0]   !!!!!这里train_seq = train_seq.reshape((len(train_seq), 1))X.append(train_seq)y.append(data[in_end:out_end, 0])in_start += 1return np.array(X), np.array(y)

多变量输入

ef sliding_window(train, sw_width=7, n_out=7, in_start=0):'''该函数实现窗口宽度为7、滑动步长为1的滑动窗口截取序列数据截取所有特征'''# 这里是将三维数组重塑成二维数组,这样就还原回以每日为单位的采样序列data = train.reshape((train.shape[0] * train.shape[1], train.shape[2]))  # 将以周为单位的样本展平为以天为单位的序列X, y = [], []# print(train.shape[0])  #159# print(train.shape[1])  #7# print(train.shape[2])  #8# print(len(data))       #1113# print(data.shape)      #(1113, 8)for _ in range(len(data)):in_end = in_start + sw_widthout_end = in_end + n_out# 保证截取样本完整,最大元素索引不超过原序列索引,则截取数据;否则丢弃该样本if out_end < len(data):# 因为是for循环,所以滑动窗口的滑动步长为1;想调整滑动步长可以通过yield实现,后边的文章会讲;!!!!!这里X.append(data[in_start:in_end, :])  # 截取窗口宽度数量的采样点的全部8个特征y.append(data[in_end:out_end, 0])   # 截取样本之后7个时间步长的总有功功耗(截取一个单列片段,有7个元素)in_start += 1# print(np.array(X).shape)    #(1092, 14, 8)# print(np.array(y).shape)    #(1092, 7)return np.array(X), np.array(y)

滑动窗口sliding_window相关推荐

  1. 时间序列分类05:滑动窗口处理时间序列分类数据

    [时间序列预测/分类] 全系列60篇由浅入深的博文汇总:传送门 在处理时间序列预测或者时间序列分类任务的时候,经常会遇到"滑动窗口(sliding window)"的概念,包括在之 ...

  2. 【python】滑动窗口算法

    一.诉求 起因是要计算视频卡顿时长. 在处理video_to_pic的时候,用数字标识图片切片,比如1.png.2.png: 由于卡顿时长不一致,不是固定的区间,但希望获取到所有卡顿的小区间: 当成列 ...

  3. leetcode 30. Substring with Concatenation of All Words 与所有单词相关联的字串 滑动窗口法

    题目描述 给定一个字符串 s 和一些长度相同的单词 words.在 s 中找出可以恰好串联 words 中所有单词的子串的起始位置. You are given a string, s, and a ...

  4. leetcode 567. Permutation in String 字符串的排列 滑动窗口法

    题目 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列.换句话说,第一个字符串的排列之一是第二个字符串的子串. 示例1:输入: s1 = "ab" s ...

  5. leetcode Longest Substring with At Most Two Distinct Characters 滑动窗口法

    题目解析 代码如下 题目解析 这一题是一道会员的题目,题目介绍如下: Given a string, find the length of the longest substring T that c ...

  6. leetcode 3. Longest Substring Without Repeating Characters 最长非重复子串的长度 滑动窗口法

    题目链接 根据我们之前介绍的滑动窗口法的解法: 滑动窗口法详解 leetcode 438. Find All Anagrams in a String 滑动窗口法 这题,我们不难解决,使用之前的模板. ...

  7. leetcode 438. Find All Anagrams in a String 滑动窗口法

    题目链接 解析 主要使用滑动窗口法解题,需要好好体会的是中间的两个判断couter的用法,这里很巧妙. 如果想了解更多的滑动窗口法内容,看这里: 滑动窗口法详解 代码 from collections ...

  8. 2021年大数据Flink(二十):案例二 基于数量的滚动和滑动窗口

    目录 案例二 基于数量的滚动和滑动窗口 需求 代码实现 案例二 基于数量的滚动和滑动窗口 需求 需求1:统计在最近5条消息中,各自路口通过的汽车数量,相同的key每出现5次进行统计--基于数量的滚动窗 ...

  9. 2021年大数据Flink(十九):案例一 基于时间的滚动和滑动窗口

    目录 案例一 基于时间的滚动和滑动窗口 需求 代码实现 案例一 基于时间的滚动和滑动窗口 需求 nc -lk 9999 有如下数据表示: 信号灯编号和通过该信号灯的车的数量 9,3 9,2 9,7 4 ...

最新文章

  1. 港口物流系统设计与优化-SMU在线学习笔记
  2. STM32 基础系列教程 20 - RTC
  3. Java:Comparable接口
  4. C语言再学习 -- 函数
  5. 225. Implement Stack using Queues
  6. 攻防世界-web-ics-07-从0到1的解题历程writeup
  7. vb初学者编程代码大全_VB编程应该如何学习?
  8. 【Oracle】Python 连接Oracle 数据库
  9. const与define之间的区别?
  10. jsp中给div加背景_web前端入门到实战:详解css3如何给背景图片加颜色遮罩
  11. python super()方法的作用_详解python的super()的作用和原理
  12. 扫地机器人水箱背景_家友扫地机器人拖地水箱配件(米家扫地机器人1代版)体验(Case Closed)...
  13. Linux 网络编程 —— TCP编程之客户端 向服务器发送数据 接收服务器发来的数据
  14. HDU4641 || 6194多校 (后缀自动机-最少出现K次的字串个数 || 恰好出现K次字符串的个数)...
  15. 渠道效果五步优化,让采购的流量物超所值
  16. 依赖注入原理,作用,注入方式——Spring IOC/DI(二)
  17. 苹果手机绕过密码和指纹自动支付,细思极恐!
  18. 蓬莱与威海的几尊塑像
  19. Oracle查询表空间
  20. Oracle DB 备份和恢复的概念

热门文章

  1. e-Learning Class(极域电子教室客户端)的另类破解思路
  2. 计算机硬盘维修,笔记本电脑硬盘坏了怎么办 最详细解决方法【图文教程】
  3. 风云三号卫星相关学习记录
  4. 带初学者了解一下OSPF
  5. 微服务架构(一):什么是微服务(一)
  6. java搭建房子图片,漂亮的农村一层半自建楼房户型图片大全
  7. 【C语言督学训练营 第三天】C语言的运算符与表达式
  8. c语言随机抽取扑克问题,关于扑克牌的问题
  9. Unity创建2.5D地图 【1】
  10. 如何获取网页上的LOGO