如何解决股票预测特征缩放环节的TypeError与NameError代码报错问题
问题排查与解决
报错根因分析
1. 第一个报错TypeError: only integer scalar arrays can be converted to a scalar index
- 错误来源不是你标注的数组转换行,是后续的
np.reshape行参数书写错误 - 你需要取X_train第二维的长度,正确写法是
X_train.shape[1],但原代码漏写了.shape,直接写了X_train[1],这代表取X_train的第二个样本(本身是一个长度为60的数组),把数组传给reshape当维度参数,不符合参数要求就触发类型错误。
2. 第二个报错NameError: name 'indices' is not defined
- 你修改代码时引入了完全没有提前定义过的
indices变量,属于无意义修改,直接触发未定义报错,这行修改完全不需要。
修复后的完整代码
# Feature Scaling sc = MinMaxScaler(feature_range=(0, 1)) training_set_scaled = sc.fit_transform(training_set) # Creating a data structure with 60 time-steps and 1 output X_train = [] y_train = [] # 优化点:不写死终止值,用数据集实际长度适配不同场景 for i in range(60, len(training_set_scaled)): X_train.append(training_set_scaled[i-60:i, 0]) y_train.append(training_set_scaled[i, 0]) X_train, y_train = np.array(X_train), np.array(y_train) # 修复reshape参数:补充.shape属性 X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
额外校验建议
- 修复后可打印
X_train.shape确认维度是否符合后续模型(如LSTM)的输入要求,正常输出应为(样本数, 60, 1) - 避免硬编码数据集长度,可适配不同大小的训练集,减少后续索引越界风险
内容的提问来源于stack exchange,提问作者mey
相关产品推荐
相关产品推荐

