Python as_strided 方法,它是如何工作的?

问题描述 投票:0回答:1

我正在尝试在我的一项作业中进行一些异常检测,并且正在尝试创建滑动窗口,但我想让它们使一个窗口不会与另一个窗口重叠。例如 数组 = [1, 2, 3, 4, 5, 6] 我想要得到这个结果 结果 = [[1, 2, 3], [4, 5, 6]] 显然,您可以使用 as_strided 或 moving_window_view 方法,但第二个方法效果不佳,但如果有人知道解决此问题的方法,我们将不胜感激

python numpy data-mining
1个回答
0
投票

你的一维数组:

In [234]: x=np.arange(1,7)

简单的重塑:

In [235]: x.reshape(-1,3)
Out[235]: 
array([[1, 2, 3],
       [4, 5, 6]])

滑动窗口创建 (3,) 个窗口,完全重叠

In [236]: np.lib.stride_tricks.sliding_window_view(x,3)
Out[236]: 
array([[1, 2, 3],
       [2, 3, 4],
       [3, 4, 5],
       [4, 5, 6]])

从中我们可以轻松地切出不重叠的元素:

In [237]: np.lib.stride_tricks.sliding_window_view(x,3)[::3]
Out[237]: 
array([[1, 2, 3],
       [4, 5, 6]])

要使用

as_strided
,我们必须了解
strides
sliding_windows
为我们做这样的思考:

In [238]: x.strides
Out[238]: (4,)

In [239]: np.lib.stride_tricks.as_strided(x,shape=(2,3),strides=(12,4))
Out[239]: 
array([[1, 2, 3],
       [4, 5, 6]])

那个

12
(3*4)

相当于sliding_windows:

In [240]: np.lib.stride_tricks.as_strided(x,shape=(4,3),strides=(4,4))
Out[240]: 
array([[1, 2, 3],
       [2, 3, 4],
       [3, 4, 5],
       [4, 5, 6]])

sliding_windows
更容易使用,因为我们不需要了解步幅,并且它可以确保结果的大小正确。

© www.soinside.com 2019 - 2024. All rights reserved.