You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

numpy sliding_window_view输出维度疑问:为何得到(3,1,3,3)而非期望的(3,3,3)?

问题解析与解决方案

1. 为什么输出形状是(3,1,3,3)?

当你调用np.lib.stride_tricks.sliding_window_view(arr, (3,3))时,NumPy会默认在输入数组的所有轴上应用滑动窗口逻辑。你的输入数组arr形状是(5,3),对应两个轴:

  • 轴0(时间维度)长度为5,窗口大小设为3,滑动后可得到5-3+1=3个窗口位置;
  • 轴1(特征维度)长度为3,窗口大小也设为3,滑动后只能得到3-3+1=1个窗口位置(因为刚好填满整个特征维度,没有滑动空间)。

滑动窗口的输出结构遵循「各轴滑动后的位置数 + 窗口自身形状」的规则,也就是(轴0滑动位置数, 轴1滑动位置数, 窗口轴0大小, 窗口轴1大小),最终就得到了(3,1,3,3)的形状。其中第二个长度为1的维度,就是特征维度上无滑动空间导致的冗余维度。

2. 无需reshape得到(3,3,3)形状的方法

你真正需要的是仅在时间维度(轴0)上滑动窗口,同时保留特征维度的完整结构。可以通过指定axis参数明确告诉函数只在目标轴上应用窗口:

import numpy as np
arr = np.arange(15).reshape(5,3)
result = np.lib.stride_tricks.sliding_window_view(arr, window_shape=3, axis=0)
print(result.shape)  # 输出 (3, 3, 3)

这样设置后,函数仅在轴0上滑动大小为3的窗口,每个窗口包含3个时间步的完整特征(每个时间步3个特征),输出自然就是你想要的3阶数组。

另一种等价写法是用None标记不需要滑动的轴,明确指定窗口形状对应目标轴:

result = np.lib.stride_tricks.sliding_window_view(arr, window_shape=(3, None))

这里None表示该轴保持原维度长度不应用滑动,输出形状同样为(3,3,3)。

内容的提问来源于stack exchange,提问作者meliniak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:24:05