You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Numpy构建用于神经网络的时序预测输入数组?

问题描述

现有一个形状为(1542, 2)的2D NumPy数组:

[[-0.83776179 -1.        ]
 [-0.83229744 -0.99845917]
 [-0.81120124 -0.99691834]
 ...
 [ 0.33190834  0.99691834]
 [ 0.3312287   0.99845917]
 [ 0.34686055  1.        ]]

需要将其分组,每个样本包含目标条目之前的200个条目,用于预测下一个条目,最终得到形状为(N, 200, 2)的3D数组(其中N = 1542 - 200,即总样本数),结构示例如下:

[[[-0.83776179 -1.        ]
 [-0.83229744 -0.99845917]
 [-0.81120124 -0.99691834]
 ...
 # 共200个元素
 [ 0.33190834  0.99691834]
 [ 0.3312287   0.99845917]
 [ 0.34686055  1.        ]]
 # 后续样本依次滑动窗口生成
 [[-0.83229744 -0.99845917]
 [-0.81120124 -0.99691834]
 ...
 # 同样200个元素
 [ 0.3312287   0.99845917]
 [ 0.34686055  1.        ]
 # 下一个新条目
 [x, y]]]
最优实现方法

使用NumPy的np.lib.stride_tricks.sliding_window_view是最高效的方案,它通过调整数组的内存步长实现滑动窗口,不需要额外复制数据,性能最优。

代码示例

假设原始数组名为arr:

import numpy as np

# 原始数组,形状(1542, 2)
arr = np.array([[-0.83776179, -1.        ],
                [-0.83229744, -0.99845917],
                [-0.81120124, -0.99691834],
                # ... 省略其余元素
                [ 0.33190834,  0.99691834],
                [ 0.3312287,   0.99845917],
                [ 0.34686055,  1.        ]])

# 生成滑动窗口,每个窗口包含200个连续条目
windowed_arr = np.lib.stride_tricks.sliding_window_view(arr, window_shape=(200, 2))

# 调整形状到(N, 200, 2),其中N=1542-200=1342
windowed_arr = windowed_arr.squeeze(axis=1)

补充说明

  • sliding_window_view会生成形状为(1342, 1, 200, 2)的数组,通过squeeze(axis=1)去掉多余的维度,得到最终的(1342, 200, 2)结构。
  • 这种方法完全基于内存视图,没有数据复制,处理大数组时速度远快于循环或列表推导式。
  • 如果你的NumPy版本低于1.20.0(sliding_window_view在1.20.0版本引入),可以用np.lib.stride_tricks.as_strided手动实现,代码如下:
def sliding_window(arr, window_size):
    n_samples = arr.shape[0] - window_size + 1
    strides = (arr.strides[0],) + arr.strides
    shape = (n_samples, window_size) + arr.shape[1:]
    return np.lib.stride_tricks.as_strided(arr, shape=shape, strides=strides)

windowed_arr = sliding_window(arr, 200)

内容的提问来源于stack exchange,提问作者Apollo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:15:34