![](/img/trans.png)
[英]Averaging several time-series together with confidence interval (with test code)
[英]Time-series averaging in numpy/python
我的数据由一个时间数组组成,每秒包含10个数据点,每个时间对应一个强度值数组。 因此,举个例子,我有:
times = np.arange(0,100,0.1)
intensities = np.random.rand(len(times))
我想看看如果我使用更长的平均时间,数据将是什么样子,所以我想创建一些仓(例如1秒,5秒和10秒),并对这些新仓中的强度值进行平均。 在numpy中执行此操作的最佳方法是什么? (或其他python包,但我假设numpy / scipy有适合我的东西。)我可以使用for循环,但我希望有更好的方法。 谢谢!
您可以按照此处 stackoverflow所述使用convolve
计算移动平均值。
from pylab import plot, show
import numpy as np
times = np.arange(0,100,0.1)
intensities = np.random.rand(len(times))
def window(size):
return np.ones(size)/float(size)
plot(times,intensities,'k.')
plot(times,np.convolve(intensities,window(10),'same'),'r')
plot(times,np.convolve(intensities,window(100),'same'),'b')
show()
您可以对数据进行整形以将其分组为10、50或100的组。然后调用mean(axis=-1)
方法以获取最后一个轴(大小为10、50或100的轴mean(axis=-1)
的平均值:
使用此设置:
In [10]: import numpy as np
In [11]: times = np.linspace(0,100,1000)
In [12]: intensities = np.random.rand(len(times))
这是每10个值的平均值:
In [13]: intensities.reshape(-1,10).mean(axis=-1)
Out[13]: <output omitted due to length>
每50个值的平均值:
In [14]: intensities.reshape(-1,50).mean(axis=-1)
Out[14]: <output omitted due to length>
每100个值的平均值:
In [15]: intensities.reshape(-1,100).mean(axis=-1)
Out[15]:
array([ 0.50969463, 0.5095131 , 0.52503152, 0.49567742, 0.52701341,
0.53584475, 0.54808964, 0.47564486, 0.490907 , 0.50293636])
arr.reshape(-1, 10)
告诉NumPy arr.reshape(-1, 10)
数组arr
的形状,使其最后一个轴的大小为10。 -1
告诉NumPy给第一个轴赋予填充数组所需的任何大小。
请注意,以这种方式使用reshape
要求len(intensities)
被要分组的大小(例如10、50、100 len(intensities)
均匀地整除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.