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
すべて問題なく、次の結果が得られます。これは予期しないものです。
- 結果は float にキャストされます
-3.25951556e-311など、予想されるnanの代わりに乱数が含まれています
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]]])