You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python的现货价格预测滑动窗口实现及报错解决求助

问题排查与修正方案

错误原因

  • 直接报错原因:你定义的window函数要求传入lp、ls两个必填位置参数,但调用时仅传入了1个参数,触发参数缺失错误。
  • 深层逻辑问题:原有函数变量命名混乱、核心逻辑被注释,和你描述的滑动窗口算法完全不匹配,无法完成特征-标签对的切分。

修正后代码

对齐你描述的算法逻辑,实现步长为lpt、冗余数据反向对齐、输出(xi, yi)样本对的功能:

import pandas as pd
import numpy as np

# 读取数据集
df = pd.read_csv('spot-prices-2021-05-16.csv', delimiter=';')
price_series = df['SpotPrice'].values  # 提取价格序列

def sliding_window(price_arr, lsw, lpt):
    """
    按描述的滑动窗口逻辑切分样本
    :param price_arr: 历史价格序列数组
    :param lsw: 滑动窗口(特征)长度
    :param lpt: 待预测窗口(标签)长度
    :return: 特征数组X,标签数组Y
    """
    lp = len(price_arr)
    # 计算样本数量,向下取整,对齐公式ns = ⌊(lp − lsw)/lpt⌋
    ns = int(np.floor((lp - lsw) / lpt))
    if ns <= 0:
        raise ValueError("窗口长度设置过大,无法生成有效样本")
    
    # 处理冗余数据,从序列末尾反向对齐取数
    start_idx = lp - (ns * lpt + lsw)
    X, Y = [], []
    
    for i in range(ns):
        # 计算当前样本的特征起止位置
        x_start = start_idx + i * lpt
        x_end = x_start + lsw
        # 计算当前样本的标签起止位置
        y_start = x_end
        y_end = y_start + lpt
        
        xi = price_arr[x_start:x_end]
        yi = price_arr[y_start:y_end]
        X.append(xi)
        Y.append(yi)
    return np.array(X), np.array(Y)

# 示例参数:滑动窗口长度lsw=12,预测窗口长度lpt=4,可按需调整
lsw = 12
lpt = 4
X, Y = sliding_window(price_series, lsw, lpt)

# 输出结果验证
print(f"生成样本数量:{len(X)}")
print(f"每个特征维度:{X.shape[1]},每个标签维度:{Y.shape[1]}")
print("第一个样本特征:", X[0])
print("第一个样本标签:", Y[0])

输出说明

运行上述代码后会输出:

  1. 生成的有效样本总数,和你公式计算的ns一致
  2. 每个特征、标签的维度,对应lsw和lpt的设置
  3. 首条样本的特征和标签值,可验证切分逻辑是否符合要求

内容的提问来源于stack exchange,提问作者NIrbhay Mathur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 10:03:02