DataFrame转为LSTM输入时reshape报错该如何解决?
错误原因
你代码里的reshape参数使用错误:
- 你调用的
train_data[0]是取数组的第一行数据,返回的是长度为6的一维数组,不是你预期的数组第一维的长度 reshape要求传入的所有参数都是整数,传入数组自然会触发类型错误- 若要获取数组的各维度长度,应该调用
.shape属性,train_data.shape会返回(6042, 6)的维度元组
解决方法
场景1:将全量数据作为单个样本输入LSTM
如果你的需求是把所有6042条时序数据当成1个样本,时间步长为6042,特征数为6,直接按下面代码修改即可:
train_data = train_data.to_numpy() # 按[samples, time steps, features]格式reshape train_data = train_data.reshape(1, train_data.shape[0], train_data.shape[1]) # 转换后数组形状为 (1, 6042, 6)
场景2:生成多组时序样本(时序任务通用方案)
实际时序预测任务中通常不会把全量数据当成单个样本,而是按固定时间步长滑窗生成多个样本。比如设置时间步长为n,即取连续n行数据作为一个样本,示例代码如下:
import numpy as np # 滑窗生成时序样本函数 def build_seq_dataset(data, time_steps): seq_list = [] for i in range(len(data) - time_steps + 1): seq_list.append(data[i:i+time_steps, :]) return np.array(seq_list) train_data = train_data.to_numpy() # 可根据任务需求调整时间步长数值 time_steps = 20 train_data = build_seq_dataset(train_data, time_steps) # 当time_steps=20时,转换后数组形状为 (6023, 20, 6)
内容的提问来源于stack exchange,提问作者apin pipin
相关产品推荐
相关产品推荐

