The*_*era 21 python signal-processing numpy scipy resampling
我有一个1-n numpy数组,我想下采样.如果下采样栅格不完全适合数据,则可以使用以下任何方法:
基本上如果我有
1 2 6 2 1
Run Code Online (Sandbox Code Playgroud)
我的下采样率为3,所有以下都可以:
3 3
3 1.5
Run Code Online (Sandbox Code Playgroud)
或者插值会给我的任何东西.
我只是在寻找最快/最简单的方法.
我找到了scipy.signal.decimate,但这听起来像是抽取了值(根据需要取出它们,只在X中留下一个). scipy.signal.resample似乎有正确的名字,但我不明白他们在描述中的整个傅立叶的位置.我的信号不是特别周期性的.
你能帮我一把吗?这似乎是一项非常简单的任务,但所有这些功能都非常错综复杂......
shx*_*hx2 28
在简单的情况下,您的数组大小可以被下采样因子(R)整除,您可以使用reshape数组,并沿新轴取平均值:
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])
Run Code Online (Sandbox Code Playgroud)
在一般情况下,您可以使用NaNs将数组填充到可被整除的大小R,并使用均值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.])
Run Code Online (Sandbox Code Playgroud)