考虑以下数组:
arr = np.arange(15).reshape(5,3)
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]
[12 13 14]]您可以将第0维视为给定时间步长的时间和第1维。我想在它上面创建一个滚动窗口,即随着时间的推移,长度为3的序列。
呼叫
np.lib.stride_tricks.sliding_window_view(arr, (3,3))结果:
[[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]]]
[[[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]]
[[[ 6 7 8]
[ 9 10 11]
[12 13 14]]]]正如我们所料。
唯一让我困惑的是它的形状,它是(3,1,3,3),而我最初预计它是(3,3,3)。我想这可能是关于应用窗口的轴,但在修改轴参数时,我无法获得所需的形状。有人能解释这个吗?有没有其他方法可以在不重塑结果数组的情况下获得3阶形状?
发布于 2021-05-30 19:43:23
sliding_window_view将始终返回比窗形状高2维的视图:
在末尾插入滑动窗口尺寸,并根据滑动窗口大小的要求修剪原始尺寸
但是,在本例中,假设对于给定的窗口大小,y上的窗口数量将为1,请使用axis=(0,0)并从返回的数组中获取第一个值,以获得所需的结果,而无需进行额外的整形或重新调整:
arr = np.arange(15).reshape(5, 3)
b = np.lib.stride_tricks.sliding_window_view(arr, (3, 3), axis=(0, 0))[0]b
[[[ 0 3 6]
[ 3 6 9]
[ 6 9 12]]
[[ 1 4 7]
[ 4 7 10]
[ 7 10 13]]
[[ 2 5 8]
[ 5 8 11]
[ 8 11 14]]]
# b.shape (3, 3, 3)sliding_window_view(arr, (3, 3), axis=(0, 0)).shape # (1, 3, 3, 3)
sliding_window_view(arr, (3, 3), axis=(0, 0))[0].shape # (3, 3, 3)https://stackoverflow.com/questions/67760470
复制相似问题