我正在使用卷积网络来预测时间序列。为此,我使用滚动窗口获取最后的t点,将其用作时间序列。每个功能都将成为一个频道,因此我设置了多个时间序列。数据必须为3维[n_samples,window_size,features]。我拥有的原始数据集是[n_samples,features]。数据已经按时间升序排列。我的问题是,考虑到我有近50万行,我创建3D张量的方式会使计算机崩溃。这是我正在使用的代码。
prueba = x_data # This data set has shape [500k,20]
window_size = 100 # I taking the last 100 days
n_units,n_features = prueba.shape
n_samples = n_units - window_size +1 # Represent the number of samples you are getting from the rolling windows.
data_list = []
for init_index in range(n_samples):
fin_index = window_size + init_index
window_set = prueba[init_index:fin_index,:]
window_flat = np.reshape(window_set,(1,window_size*n_features))
data_list.append(window_flat)
features_tensor = np.concatenate(data_list,axis = 0)
features_tensor = np.reshape(features_tensor,(n_samples,window_size,n_features)) ## This break my computer
问题是当我使用np.concatenate将我创建的所有单个数据集放在一起时,计算机崩溃了。有谁知道更快的方法。我正在尝试以一种避免使用np.concatenate的方式进行思考,但是到目前为止,我还无法弄清楚。
答案 0 :(得分:1)
使用此处使用的方法(结果是np.concatenate
)效率很低,因为您要复制每个数据点(大约)window_size
次。几乎可以肯定这是浪费内存,因为理想情况下,对此数据集执行的任何操作都应该能够滚动地进行:遍历时间序列,而无需查看张量中完全扩展/大量重复的数据集格式。
因此,我建议更好的方法是找到一种方法来避免首先构建此冗余张量。
由于我们不知道您正在使用此张量做什么,因此无法给出答案。但是,请注意以下几点: