滑动窗口视图输出尺寸

2024-10-05 10:00:23 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑以下数组:

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)。我想它可能是关于应用窗口的轴,但在修改axis参数时,我无法获得所需的形状。有人能解释吗?有没有其他方法可以在不改变结果数组形状的情况下获得三阶形状


Tags: viewlibnp时间序列数组window形状
1条回答
网友
1楼 · 发布于 2024-10-05 10:00:23

^{}将始终返回窗口形状上方2维的视图:

The sliding window dimensions are inserted at the end, and the original dimensions are trimmed as required by the size of the sliding window

但是,在这种情况下,对于给定的窗口大小,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)

相关问题 更多 >

    热门问题