x2 = x1.copy()
时间: 2024-05-28 16:11:50 浏览: 6
这行代码是将列表 x1 的所有元素复制到一个新的列表 x2 中。这个新的列表 x2 是 x1 的副本,它们是独立的,对一个列表的操作不会影响另一个列表。这种复制方式叫做浅拷贝,因为它只复制了列表元素的引用而不是元素本身。如果列表中的元素是可变对象(如列表、字典等),那么对 x2 中的元素进行修改,会影响到 x1 中对应的元素,因为它们实际上引用的是同一个对象。
相关问题
下面是单步单维预测模型的数据结构,如果改为多步预测,结构如何修改: 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 Y = np.zeros((self.n-s, self.m)) # output dataset 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() return X1, X2, Y
如果要改为多步预测,需要修改输出数据集Y的维度,变成一个矩阵,其中每一行表示从当前时间步开始的未来若干时间步的预测值。同时,由于需要预测多个时间步,长期数据集X2也需要进行相应的修改,变成一个三维数组,其中第一维表示时间步,第二维表示长期时间窗口,第三维表示特征数量。修改后的代码如下:
```
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
Y = np.zeros((self.n-s-self.h+1, self.h, self.m)) # output dataset
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):
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].reshape(self.ps, self.Ck, self.m).copy()
Y[i-s-self.h+1] = self.raw[i-self.h+1:i+1].copy()
return X1, X2, Y
```
请修改输出,一个是LABEL输出,一个是特征输出 : def _slice_multi(self): # self.n 是数据集总行数 # self.m 是列 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 Y = np.zeros((self.n-s, self.m)) # output dataset 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() return X1, X2, Y
修改后的函数输出为:
```python
def _slice_multi(self):
# self.n 是数据集总行数
# self.m 是列
s = self.ps * self.skip + self.Ck - 1 + self.h - 1
X1 = np.zeros((self.n - s, self.w, self.m)) # 短期数据集
X2 = np.zeros((self.n - s, self.ps * self.Ck, self.m)) # 长期数据集
Y = np.zeros((self.n - s, self.m)) # 输出数据集
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):
# 执行self.ps次,每次间隔self.skip长,取self.Ck=6, total = self.ps * self.Ck
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()
# 返回特征和标签
return {'X1': X1, 'X2': X2}, Y
```
修改后的函数输出了两个变量,一个是包含特征 X1 和 X2 的字典,另一个是标签 Y。这样的修改使得函数输出更加清晰,方便后续的使用。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)