假设我有两个numpy数组:
y(n) = [y1, y2, y3...]
t(n) = [t1, t2, t3...]
y(n)
表示时间点t(n)
处的信号值。
现在,我想计算此信号的统计量,如标准偏差等。
如果样本是以统一的时间间隔拍摄的,我可以使用标准的numpy函数std()
。就我而言,样本不是采用统一的时间间隔。也就是说,t2-t1
可能不等于t3-t2
。
我正在考虑创建一个新数组,该数组将通过插入y
的值来创建。
g = [g1, g2, g3...] where
ts = np.min(np.diff(t)) # new sample size
g(n) = numpy.interp(n*ts, t, y) # interpolate
现在使用g
代替y
来计算std
等。
我想知道是否有更好的方法来做到这一点。
答案 0 :(得分:1)
插值和重采样是一种方法,但使用非均匀时间间隔作为权重更容易。也就是说,随着时间的推移平均某事,将每个值乘以相应的时间间隔;拿这笔钱;并除以经过的总时间。
dt = np.diff(t)
total_time = t[-1] - t[0]
mean = np.dot(y[:-1], dt)/total_time
std = np.sqrt(np.dot((y[:-1]-mean)**2, dt)/total_time)
对于n个样本,你最终会得到n-1个时间间隔(在数组dt中),所以其中一个样本(最后一个)被丢弃,因为我们不知道它的时间段。除非样本数量非常小,否则无关紧要。