Y[i-s] = self.raw[i : i+predict_step,-1].copy() 输出不是应该这样定义吗?
时间: 2024-03-25 19:41:12 浏览: 7
如果你希望`Y`数组中的每一行是长度为`predict_step`的一维数组,那么可以按照你的建议修改代码如下:
```
predict_step = 6
Y = np.zeros((self.n-s, predict_step))
...
Y[i-s] = self.raw[i:i+predict_step, -1].copy()
```
这样,`Y`数组的每一行就是一个长度为6的一维数组,包含了需要预测的6个时间步的数据。
相关问题
应为最后一列是LABEL,我不确定Y[i-s] = self.raw[i:i+predict_step].copy() 还是 Y[i-s] = self.raw[i:i+predict_step,-1].copy()
如果你的时间序列数据集中最后一列是标签列,并且你希望将标签列中的数据作为输出数据集`Y`,那么你可以将代码修改为:
```
s = self.ps*self.skip + self.Ck-1 + self.h-1
X1 = np.zeros((self.n-s, self.w, self.m)) # short term dataset
X2 = np.zeros((self.n-s, self.ps*self.Ck, self.m)) # long term dataset
predict_step = 6
Y = np.zeros((self.n-s, predict_step))
for i in range(s, self.n):
t = i-self.h+1
X1[i-s] = self.raw[t-self.w:t].copy()
idx = []
for k in range(self.ps): # 执行4次,每次间隔skip长,取Ck=6, total = 4 * 6 = 24
idx = list(range(t-self.Ck-k*self.skip, t-k*self.skip)) + idx
idx = np.array(idx, dtype=int)
X2[i-s] = self.raw[idx].copy()
Y[i-s] = self.raw[i:i+predict_step, -1].copy()
return X1, X2, Y
```
这样,`Y`数组的每一行将会包含从时间步i到时间步(i+predict_step-1)的标签数据。
请从新检查 : s = self.ps*self.skip + self.Ck-1 + self.h-1 X1 = np.zeros((self.n-s, self.w, self.m)) # short term dataset X2 = np.zeros((self.n-s, self.ps*self.Ck, self.m)) # long term dataset predict_step = 6 Y = np.zeros((self.n-s, predict_step)) for i in range(s, self.n): t = i-self.h+1 X1[i-s] = self.raw[t-self.w:t].copy() idx = [] for k in range(self.ps): # 执行4次,每次间隔skip长,取Ck=6, total = 4 * 6 = 24 idx = list(range(t-self.Ck-k*self.skip, t-k*self.skip)) + idx idx = np.array(idx, dtype=int) X2[i-s] = self.raw[idx].copy() #Y[i-s] = self.raw[i].copy() Y[i-s] = self.raw[i : i+predict_step].copy() return X1, X2, Y
非常抱歉,看到您之前的提问,我可能理解有误。现在重新检查您提供的代码:
```
s = self.ps*self.skip + self.Ck-1 + self.h-1
X1 = np.zeros((self.n-s, self.w, self.m)) # short term dataset
X2 = np.zeros((self.n-s, self.ps*self.Ck, self.m)) # long term dataset
predict_step = 6
Y = np.zeros((self.n-s, predict_step))
for i in range(s, self.n):
t = i-self.h+1
X1[i-s] = self.raw[t-self.w:t].copy()
idx = []
for k in range(self.ps): # 执行4次,每次间隔skip长,取Ck=6, total = 4 * 6 = 24
idx = list(range(t-self.Ck-k*self.skip, t-k*self.skip)) + idx
idx = np.array(idx, dtype=int)
X2[i-s] = self.raw[idx].copy()
Y[i-s] = self.raw[i : i+predict_step].copy()
return X1, X2, Y
```
这段代码的作用是为时间序列数据生成两种不同的输入数据集`X1`和`X2`,以及一个输出数据集`Y`。其中,`X1`表示短期数据集,`X2`表示长期数据集,`Y`表示需要预测的数据集。具体来说,对于每个时间步`t`,`X1`将包含`t-w`到`t-1`时间步的数据,`X2`将包含从`t-Ck`到`t-1`的数据,其中`Ck`表示长期记忆的窗口大小,`ps`表示长期记忆的次数,`skip`表示两次长期记忆数据之间的间隔。`Y`将包含从时间步`t`到时间步`t+5`的数据。
在这个代码中,`Y[i-s] = self.raw[i : i+predict_step].copy()` 表示将从时间步i到时间步(i+predict_step-1)的数据复制到`Y`数组的第`i-s`行。因此,如果你希望将输出数据集的每一行改为一个长度为`predict_step`的一维数组,你可以将这行代码修改为:
```
Y[i-s] = self.raw[i:i+predict_step].copy()
```
这样,`Y`数组的每一行就是一个长度为6的一维数组,包含了需要预测的6个时间步的数据。