为时间序列预测机器学习 (Numpy) 重塑数据的有效方法

Efficient way to Reshape Data for Time Series Prediction Machine Learning (Numpy)

假设我有一个数据集(numpy 数组)X 个时间序列的 N 个样本,每个样本具有 D 维向量的 T 个时间步长,因此:

X.shape == (N,T,D)

现在我想将其重塑为 x(数据集)和 y(标签)以应用机器学习来预测时间序列中的步骤。

我想获取每个长度为 n 的样本的每个子系列

x.shape==(N*(T-n),n,D) and y.shape==(N*(T-n)),D)

X[k,j:j+n,:]

成为我在 x

中的样本之一
X[k,j+n+1,:] 

它是 y 中的标签。

for 循环是唯一的方法吗?

所以我有下面的方法,但是它有一个for循环,我不确定我不能做得更好:

    def reshape_data(self, X, n):
    """
    Reshape a data set of N time series samples of T time steps each
    Args:
        data: Time series data of shape (N,T,D)
        n: int, length of time window used to predict x[t+1]

    Returns:

    """
    N,T,D = X.shape

    x = np.zeros((N*(T-n),n,D))
    y = np.zeros((N*(T-n),D))

    for i in range(T-n):
        x[N*i:N*(i+1),:,:] = X[:,i:i+n,:]
        y[N*i:N*(i+1),:] = X[:,i+n,:]

    return x,y

您正在寻找 pandas data panel。 (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Panel.html). just put into the numpy array, transpose on the minor axis and get its numpy representation (.as_matrix() or simply .values). if you want to truly do it only in numpy alone, numpy.transpose just for (https://docs.scipy.org/doc/numpy/reference/generated/numpy.transpose.html)