Python Numpy:如何计算非均匀样本下信号v(t)的标准偏差

Python Numpy:如何计算非均匀样本下信号v(t)的标准偏差,python,numpy,scipy,Python,Numpy,Scipy,假设我有两个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

假设我有两个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
等。
我想知道是否有更好的方法做到这一点。

插值和重采样是一种方法,但使用非均匀时间间隔作为权重更容易。也就是说,要计算某个值随时间的平均值,将每个值乘以相应的时间间隔;取总数;然后除以经过的总时间

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中),因此其中一个样本(最后一个)将被丢弃,因为我们不知道它的时间段。除非样本数量非常小,否则这不重要。

信号的标准偏差是在假设y(n)是取自相同概率分布的独立随机变量的情况下计算的。对于非均匀采样,如果采样时间的分布与信号相关,则此假设可能不成立。网络搜索指向最近的一篇论文,其中详细讨论了从非均匀采样信号计算统计数据。在我的例子中,它不是一个随机变量。它是在特定时间点从物理事件中观察到的一系列值。在理想情况下,这应该是一个常数。标准差用来衡量它与理想情况相比有多糟糕。谢谢你的链接。我将检查我是否可以利用那里的任何洞察力。