使用cupy.lib.stride_tricks.as_strided实现滑动窗口报错,求解决
解决CuPy as_strided生成滑动窗口的报错问题
报错原因分析
- 第一个
AttributeError:as_strided仅接受CuPy数组作为输入,你最初传入的Python列表没有shape属性,改成cp.array是正确的修正方向。 - 第二个
TypeError:shape参数不能设为None,必须明确指定目标数组的维度;strides需要是可迭代的元组,对应每个维度的字节步长,不能传入单个整数。
正确实现代码
要生成7×2的滑动窗口二维数组,正确的as_strided用法如下:
import cupy as cp x = cp.array([4,2,1,1,1,2,3,4]) window_size = 2 # 计算目标形状:窗口数量 = 原数组长度 - 窗口大小 + 1 target_shape = (x.size - window_size + 1, window_size) # 计算步长:每个维度的步长为单个元素的字节数,实现滑动1个元素的窗口 target_strides = (x.itemsize, x.itemsize) y = cp.lib.stride_tricks.as_strided(x, shape=target_shape, strides=target_strides) print(y) print(y.shape) # 输出 (7, 2)
更安全的替代方案
CuPy 10.0+版本提供了和NumPy一致的sliding_window_view,无需手动计算步长和形状,更不容易出错,性能也接近as_strided:
import cupy as cp x = cp.array([4,2,1,1,1,2,3,4]) y = cp.lib.stride_tricks.sliding_window_view(x, window_size=2) print(y.shape) # 输出 (7, 2)
内容的提问来源于stack exchange,提问作者tibibou
相关产品推荐
相关产品推荐

