首页 > 解决方案 > ndarrays 的滚动窗口

问题描述

我有一个形状为 (30,2,2) 和 2000 个元素的 n 维数组。所以我的最终数组的形状是 (2000, 30, 2, 2)。我现在想在一个新数组中堆叠滚动 200 个元素。所以我假设我的最终数组看起来像 (1801, 200, 30, 2, 2) ,其中 1800 中的每个元素都有 200 个 (30,2,2) 数组的样本。你如何在 python 中创建这个滚动窗口。我曾尝试使用 vstack,但不完全确定如何达到我想要的结果。

import numpy as np

input = np.zeros((2000, 30, 2, 2))
desired_output = np.zeros((1801, 200, 30, 2, 2))

标签: pythonpandasnumpyvstack

解决方案


我们可以利用np.lib.stride_tricks.as_stridedbasedscikit-image's view_as_windows来获得滑动窗口,从而在这里解决我们的案例。有关使用based 的更多信息as_stridedview_as_windows

输出将是输入数组的视图,因此,它在运行时几乎是免费的。实施将是 -

from skimage.util.shape import view_as_windows

out = view_as_windows(input,(200,1,1,1))[...,0,0,0].transpose(0,4,1,2,3)

推荐阅读