1

我有一个形状为 (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))
4

2 回答 2

2

我们可以利用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)
于 2020-05-10T13:31:13.363 回答
1

您可以使用numpy.stack将第一个维度和堆栈窗口大小的数组切片在一起:

import numpy as np

a = np.zeros((2000, 30, 2, 2))

ws = 200
n = a.shape[0]

r = np.stack([a[i:i+ws] for i in range(n-ws+1)])
r.shape
(1801, 200, 30, 2, 2)
于 2020-05-10T13:09:10.790 回答