为 ndarrays 滚动 windows
Rolling windows for ndarrays
我有一个形状为 (30,2,2) 和 2000 个元素的 n 维数组。所以我的最终数组的形状是 (2000, 30, 2, 2)。我现在想在一个新数组中堆叠滚动的 200 个元素。所以我假设我的最终数组看起来像 (1801, 200, 30, 2, 2),其中 1800 中的每个元素都有 200 个 (30,2,2) 数组样本。如何在 python 中创建滚动 window。我试过使用 vstack 但不完全确定我如何达到我想要的结果。
import numpy as np
input = np.zeros((2000, 30, 2, 2))
desired_output = np.zeros((1801, 200, 30, 2, 2))
您可以使用 numpy.stack:
对第一个维度进行切片并将 window 大小的数组堆叠在一起
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)
我们可以利用 np.lib.stride_tricks.as_strided
based scikit-image's view_as_windows
to get sliding windows and hence solve our case here. .
输出将是输入数组的视图,因此,它在运行时几乎是免费的。实施将是 -
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)
我有一个形状为 (30,2,2) 和 2000 个元素的 n 维数组。所以我的最终数组的形状是 (2000, 30, 2, 2)。我现在想在一个新数组中堆叠滚动的 200 个元素。所以我假设我的最终数组看起来像 (1801, 200, 30, 2, 2),其中 1800 中的每个元素都有 200 个 (30,2,2) 数组样本。如何在 python 中创建滚动 window。我试过使用 vstack 但不完全确定我如何达到我想要的结果。
import numpy as np
input = np.zeros((2000, 30, 2, 2))
desired_output = np.zeros((1801, 200, 30, 2, 2))
您可以使用 numpy.stack:
对第一个维度进行切片并将 window 大小的数组堆叠在一起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)
我们可以利用 np.lib.stride_tricks.as_strided
based scikit-image's view_as_windows
to get sliding windows and hence solve our case here.
输出将是输入数组的视图,因此,它在运行时几乎是免费的。实施将是 -
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)