Python用range()生成滑动窗口序列丢失末尾数据如何补全?
滑动窗口序列生成(末尾补全版)实现方案
原函数问题说明
原有实现的range终止条件设为len(csv)-window_size,仅会生成数据完全匹配窗口长度的窗口,当末尾剩余数据长度不足窗口大小时就会直接停止遍历,导致尾部数据丢失。
修改后实现代码
通用列表版本
如果输入的csv数据为Python列表格式,可直接使用以下实现,默认在窗口末尾填充0,你可以根据需求调整填充值、填充位置:
def create_sequences(csv, window_size, stride, pad_value=0): sequences = [] data_len = len(csv) # 遍历所有步长对应的起始位置 for i in range(0, data_len, stride): window = csv[i:i+window_size] # 长度不足时补全 if len(window) < window_size: pad_length = window_size - len(window) # 末尾填充,如需头部填充改为 window = [pad_value]*pad_length + window 即可 window += [pad_value] * pad_length sequences.append(window) return sequences
Numpy数组版本
如果输入为Numpy数组格式,可使用np.pad更便捷地实现填充:
import numpy as np def create_sequences(csv_arr, window_size, stride, pad_value=0): sequences = [] data_len = len(csv_arr) for i in range(0, data_len, stride): window = csv_arr[i:i+window_size] if len(window) < window_size: pad_length = window_size - len(window) # (0, pad_length)表示头部不填充、末尾填充pad_length位,如需头部填充改为(pad_length, 0)即可 window = np.pad(window, (0, pad_length), mode='constant', constant_values=pad_value) sequences.append(window) return np.array(sequences)
效果验证
以你给出的示例验证:数据总长度115、窗口大小30、步长20时,修改后的函数会依次生成如下窗口:
- 0-30(完整窗口)
- 20-50(完整窗口)
- 40-70(完整窗口)
- 60-90(完整窗口)
- 80-110(完整窗口)
- 100-130(实际取100-115共15位,剩余15位自动填充)
所有原始数据都被覆盖,不会出现丢失问题。
内容的提问来源于stack exchange,提问作者Muhammad Anas Raza
相关产品推荐
相关产品推荐

