Downsample a 1D numpy array

后端 未结 3 448
感动是毒
感动是毒 2020-12-14 07:57

I have a 1-d numpy array which I would like to downsample. Any of the following methods are acceptable if the downsampling raster doesn\'t perfectly fit the data:

3条回答
  •  没有蜡笔的小新
    2020-12-14 08:55

    In the simple case where your array's size is divisible by the downsampling factor (R), you can reshape your array, and take the mean along the new axis:

    import numpy as np
    a = np.array([1.,2,6,2,1,7])
    R = 3
    a.reshape(-1, R)
    => array([[ 1.,  2.,  6.],
             [ 2.,  1.,  7.]])
    
    a.reshape(-1, R).mean(axis=1)
    => array([ 3.        ,  3.33333333])
    

    In the general case, you can pad your array with NaNs to a size divisible by R, and take the mean using scipy.nanmean.

    import math, scipy
    b = np.append(a, [ 4 ])
    b.shape
    => (7,)
    pad_size = math.ceil(float(b.size)/R)*R - b.size
    b_padded = np.append(b, np.zeros(pad_size)*np.NaN)
    b_padded.shape
    => (9,)
    scipy.nanmean(b_padded.reshape(-1,R), axis=1)
    => array([ 3.        ,  3.33333333,  4.])
    

提交回复
热议问题