美丽阿坝网站怎么做,建设网站网络公司,搭建域名服务器,网页设计与网站建设心得体会文章目录 文章目录 00 写在前面01 基于Python版本的滑动窗口代码02 算法效果 00 写在前面
写这个算法原因是#xff1a;训练了一个时序网络#xff0c;该网络模型的时序维度为32#xff0c;而测试数据的时序维度为90。因此需要采用滑动窗口的方法#xff0c;生成一系列32…
文章目录 文章目录 00 写在前面01 基于Python版本的滑动窗口代码02 算法效果 00 写在前面
写这个算法原因是训练了一个时序网络该网络模型的时序维度为32而测试数据的时序维度为90。因此需要采用滑动窗口的方法生成一系列32维度的窗口用于测试。
该算法中用到了一个python的关键字yield其用于定义生成器函数。生成器函数与普通函数不同它可以在执行过程中暂停并在以后继续从暂停的地方恢复执行。每次调用生成器函数时都会返回一个生成器对象而不是直接返回一个值。在你的代码中yield 用于产生一个滑动窗口。
01 基于Python版本的滑动窗口代码
def window(seq, size3, stride2):返回一个滑动窗口宽度为size在数据序列seq上具有指定的stride。例如seq - (s0, s1, ..., s[size-1]), (s[stride], s[stride1], ..., s[stridesize-1]), ...it iter(seq) # 从输入序列创建一个迭代器result [] # 初始化一个空列表来存储当前窗口# 遍历迭代器中的每个元素for elem in it:result.append(elem) # 将当前元素添加到窗口中if len(result) size: # 如果窗口达到所需大小yield result # 生成当前窗口result result[stride:] # 根据步幅长度滑动窗口# 如果主循环后结果列表中还有剩余元素if result:i 0 # 初始化一个计数器来填充剩余窗口while len(result) size: # 当窗口小于所需大小时result.append(seq[i % len(seq)]) # 从序列开始添加元素i 1 # 增加计数器yield result # 生成最终窗口02 算法效果
# 示例使用
seq [1, 2, 3, 4, 5, 6, 7, 8]
for windowed in window(seq, size3, stride2):print(windowed) # 打印每个滑动窗口初始状态result []
添加元素result [1, 2, 3] 生成窗口 [1, 2, 3]重置 result [3]
添加元素result [3, 4, 5] 生成窗口 [3, 4, 5]重置 result [5]
添加元素result [5, 6, 7] 生成窗口 [5, 6, 7]重置 result [7]
添加元素result [7, 8]
填充元素result [7, 8, 1]生成最后一个窗口 [7, 8, 1]