0

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]]])
4

1 に答える 1