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

LSTM时间序列预处理时X_test为嵌套数组转张量报错如何解决?

问题原因

  • 核心原因是循环遍历范围错误导致部分时间窗口切片长度不足:你当前for循环遍历了全部n_records个索引,当索引i满足i + stepsBack > len(X)时,切片X[i : i + stepsBack]的长度会小于你设定的stepsBack=7,出现长短不一的窗口。
  • 训练集取的是序列前半部分的窗口,索引都比较小,所有窗口长度都能达到7,所以np.asarray可以直接转成正常的三维数值数组;而测试集取的是序列后半部分的窗口,很多索引对应的切片长度不足7,numpy无法合并成统一维度的数值数组,只能退而求其次生成嵌套的object类型数组,转tensor的时候自然报错。
  • 额外的错误点:你当前的测试集切片逻辑x[split + stepsForward : n_records - stepsForward]也存在边界计算错误,进一步放大了窗口长度不一致的问题。

修复方案

直接修改walk_forward函数的逻辑,确保所有生成的时间窗口长度完全一致:

def walk_forward(X, stepsBack, stepsForward, trainTestSplit):
    # 调整遍历范围:确保每个窗口的x长度为stepsBack、y长度为stepsForward,不会越界
    max_i = len(X) - stepsBack - stepsForward + 1
    x = []
    y = []
    for i in range(max_i):
        x.append(X[i : i + stepsBack])  
        y.append(X[i + stepsBack : i + stepsBack + stepsForward])
    
    # 直接按比例划分即可,所有窗口长度都是统一的
    split = int(len(x) * trainTestSplit)
    xtrain = x[:split]
    xtest = x[split:]
    ytrain = y[:split]
    ytest = y[split:]
    
    print('train=%d, test=%d' % (len(xtrain), len(xtest))) 
    return np.asarray(xtrain), np.asarray(ytrain), np.asarray(xtest), np.asarray(ytest)

修改后所有x窗口的长度都是固定的7,np.asarray会直接生成正常的三维数值数组,转tensor的报错会自动消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:06:04