【发布时间】:2021-12-31 13:43:13
【问题描述】:
我有以下功能
import math
import pandas as pd
import pandas_datareader as web
import numpy as np
import matplotlib.pyplot as plt
import os.path
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM, Dropout
from tensorflow.keras.models import load_model
def predict_stock(stock_name, predict_days=30):
start = dt.datetime(2021, 1, 1)
end = dt.datetime.now()
stock = web.DataReader(stock_name, data_source="yahoo", start=start, end=end)
stock = stock.filter(["Adj Close"])
stock_data = stock.values
# splits the stock into training data and test data
training_len = math.ceil(len(stock) - predict_days)
scale = MinMaxScaler()
scaled_data = scale.fit_transform(stock_data)
train_data = scaled_data[:training_len]
# sets train values
x_train = []
y_train = []
# test starts at day 60 and ends at 80 % of day end (test data)
for i in range(predict_days, len(train_data)):
x_train.append(train_data[i - predict_days:i])
y_train.append(train_data[i:i+predict_days])
x_train = np.array(x_train)
y_train = np.array(y_train)
#y_train.reshape(y_train, x_train.shape)
predict_stock('ALB', 30)
虽然 x_train 的形状为 (164, 30, 1),但 y_train 由于某种原因形状为 (164,),因此生成是相同的。
如何将 y_train 重塑为 (164,30,1)?
我试过命令:
y_train.reshape(y_train, x_train.shape)
但这给了我错误:
TypeError: only integer scalar arrays can be converted to a scalar index
如何正确重塑数组?
【问题讨论】:
-
你的 y_train 是 (164) 它只包含标签是完全正常的,你的训练 x_train 包含 30 个特征和 164 行的特征。
-
你为什么使用 x_train 作为参数?
-
我的目标是让 y_train 的形状与 x_train 相同
-
好的,这就是
x_train..shape参数的用途。但是为什么是整个x_train?您是否查看了reshape文档以了解它期望的参数类型?在跑到网上寻求帮助之前检查文档! -
在重新格式化问题时,我意识到您无法重塑
y_train以匹配x_train。您可以将其重塑为(164,1),但您不能增加元素总数以匹配x_train。但是如果x_train有 164 个“样本”和 30 个“特征”,y_train就不应该有 30 个维度。每个样本只有一个值。
标签: python arrays numpy reshape