我正在np.lib.stride_tricks.as_strided
使用以下方法生成滑动窗口
wsize=4
overlap=0
vector=np.array(range(31))
fillval=np.nan
part_to_fill=np.full(wsize - (vector.shape[0] - 1) % wsize - 1,fillval)
a_ext = np.concatenate(( vector,part_to_fill))
n = a_ext.strides[0]
strided = np.lib.stride_tricks.as_strided
res=strided(a_ext, shape=(vector.shape[0],wsize), strides=(n,n))[[np.arange(0,len(vector),wsize-overlap)],:]
如果overlap=0
一切都好,我得到
array([[[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
...,
[ 20., 21., 22., 23.],
[ 24., 25., 26., 27.],
[ 28., 29., 30., nan]]])
但是,如果overlap=1
一切都很好,我得到以下信息,这是出乎意料的,因为:
- 结果被转换为浮动
包含随机数而不是预期的 nan,例如 -3.25951556e-311
array([[[ 0.00000000e+000, 1.00000000e+000, 2.00000000e+000, 3.00000000e+000], [ 3.00000000e+000, 4.00000000e+000, 5.00000000e+000, 6.00000000e+000], [ 6.00000000e+000, 7.00000000e+000, 8.00000000e+000, 9.00000000e+000], ..., [ 2.40000000e+001, 2.50000000e+001, 2.60000000e+001, 2.70000000e+001], [ 2.70000000e+001, 2.80000000e+001, 2.90000000e+001, 3.00000000e+001], [ 3.00000000e+001, nan, 0.00000000e+000, -3.25951556e-311]]])
即使我将结果转换回 int 使用
res.astype(int)
我得到以下可能更糟的
array([[[ 0, 1, 2, 3],
[ 3, 4, 5, 6],
[ 6, 7, 8, 9],
...,
[ 24, 25, 26, 27],
[ 27, 28, 29, 30],
[ 30, -2147483648, 0, 0]]])