首页 > 解决方案 > 将时间序列数据转换为适当的时间步长

问题描述

我有一个包含 20331 行和 6 列的数据集。它基于每小时采样的时间序列数据。我想将其转换为类似于 [samples, timesteps, features] 的格式。

我尝试了以下代码:

train.reshape((20331, 30, 6))

生成的样本在每个样本中应该有 30 个时间步和 6 个特征。

但我得到一个错误:

ValueError:无法将大小为 121986 的数组重塑为形状 (20331,30,6)

在进行整形之前我需要做任何预处理吗?

标签: pythonarraysnumpytime

解决方案


您不能使用numpy.reshape. 它只是为了重塑基础数据。

因此,在您的情况下,您从 20'331 * 6 = 121'986 个数据点开始,并且希望将它们排列成 (20'331 * 30 * 6) = 3'659'580 个数据点,这是 30 倍以上你开始了。

你的二维数据应该是什么?考虑一下。Numpy 不能凭空创建数据。


编辑:

如果你想拥有 30 个数据点的切片,你可以这样做:

bs = 30 # your chosen batch-size
tail = len(train) % bs # the leftover for the last batch
train_crop = train[:-tail].reshape((-1, bs, 6))

最后一行将丢弃最后的项目,因此您的长度可以被批量大小整除。重塑的形状6在最后一个特征维度、bs第二个维度和-1第一个维度中,这让 pytorch 可以自行确定大小。


推荐阅读