【发布时间】:2020-08-18 23:20:06
【问题描述】:
已编辑:
我有一个时间序列,比如说ts = [[0 0][1 1][2 2][3 3][4 4][5 5][6 6][7 7][8 8]],我想分成以下两个序列:
X = [[[[0][1]][[1][2]][[2][3]]] [[[1][2]][[2][3]][[3][4]]] [[[2][3]][[3][4]][[4][5]]] [[[3][4]][[4][5]][[5][6]]] [[[4][5]][[5][6]][[6][7]]] [[[5][6]][[6][7]][[7][8]]]]
y = [[3][4][5][6][7][8]]
X 是三个两步滑动窗口的块序列,而 y 是它的特征。 我的策略是首先采用以下方法:
def split_sequences(sequences, n_steps):
X, y = list(), list()
for i in range(len(sequences)):
# find the end of this pattern
end_ix = i + n_steps
prev_end_ix = end_ix - 1
# check if we are beyond the dataset
if end_ix > len(sequences):
break
# gather input and output parts of the pattern
seq_x, seq_y = sequences[i:end_ix, :-1], sequences[prev_end_ix:end_ix, -1]
X.append(seq_x)
y.append(seq_y)
return np.array(X), np.array(y)
哪些回复:
X =[[[0][1]] [[1][2]] [[2][3]] [[3][4]] [[4][5]] [[5][6]] [[6][7]] [[7][8]]]
y = [[1][2][3][4][5][6][7][8]]
然后我应用以下两种方法来获得所需的输出:
def separar_uni_X(sequencia, n_passos):
X = list()
for i in range(len(sequencia)):
# find the end of this pattern
end_ix = i + n_passos
# check if we are beyond the sequence
if end_ix > len(sequencia):
break
# gather input and output parts of the pattern
seq_x = sequencia[i:end_ix, :]
X.append(seq_x)
return np.array(X)
def separar_uni_y(sequencia, n_passos):
y = list()
for i in range(len(sequencia)):
# find the end of this pattern
end_ix = i + n_passos
# check if we are beyond the sequence
if end_ix > len(sequencia):
break
# gather input and output parts of the pattern
seq_y = sequencia[i:end_ix, :]
y.append(seq_y[-1])
return np.array(y)
问题:问题在于,为了获得所需的输出,它必须将第一种方法的数据存储到后两种方法中,并且当序列太长时,它会超出内存容量。为了解决这个缺点,我使用了这种方法来分解子流程中的流程:
def split_sequence_3D(sequences, n_steps, batch_size):
X, y = list(), list()
for i in range(len(sequences)):
# find the end of this pattern
end_ix = i + n_steps
prev_end_ix = end_ix - 1
# check if we are beyond the dataset
if end_ix > len(sequences):
break
# gather input and output parts of the pattern
seq_x, seq_y = sequences[i:end_ix, :-1], sequences[prev_end_ix:end_ix, -1]
sub_X, sub_y = [], []
for j in range(batch_size):
sub_X.append(seq_x)
sub_y.append(seq_y)
X.append(sub_X)
y.append(sub_y[-1])
return np.array(X), np.array(y)
这给了我错误的输出,原因很明显:
X = [[[[0][1]][[0][1]][[0][1]]] [[[1][2]][[1][2]][[1][2]]] [[[2][3]][[2][3]][[2] [3]]] [[[3][4]][[3][4]][[3][4]]] [[[4][5]][[4][5]][[4][5]]] [[[5][6]][[5][6]][[5 [6]]] [[[6][7]][[6][7]][[6][7]]] [[[7][8]][[7][8]][[7][8]]]]
y = [[1][2][3][4][5][6][7][8]]
我已经广泛寻找替代方案,但没有找到。
【问题讨论】:
-
具体是什么问题?你有没有尝试过,做过任何研究?请参阅How to Ask、help center。
-
有趣的问题...我正在寻找类似的东西,但我不知道如何解决。
标签: python time-series append chunks