比方说,我有一组称为signal
的数据点,我想就时间对其进行两次集成(即,如果signal
是加速,我想对其进行两次集成)时间来获得职位)。我可以使用simps
对其进行一次集成,但是这里的输出是标量。您如何在数值上两次整合(随机)数据集?我以为它看起来像这样,但是很明显,第一次集成后输入不兼容。
n_samples = 5000
t_range = np.arange(float(n_samples))
signal = np.random.normal(0.,1.,n_samples)
signal_integration = simps(signal, t_range)
signal_integration_double = simps(simps(signal, t_range), t_range)
任何帮助将不胜感激。
答案 0 :(得分:1)
对不起,我回答得太快了。 scipy.integrate.simps
在您指定的范围内给出积分的值,类似于np.sum(signal)
。
您想要的是起点和每个数据点之间的集成,这就是cumsum
的作用。更好的方法可以是scipy.integrate.cumtrapz
。您可以两次应用这两种方法以获得所需的结果。
请参阅:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.simps.html
https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.cumtrapz.html
原始答案:
我认为您想要np.cumsum
。离散数据的集成只是一个总和。您必须将结果乘以步长值才能获得正确的比例。
请参见https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.cumsum.html
答案 1 :(得分:0)
通过部分集成,您可以从y''=f
到
y(t) = y(0) + y'(0)*t + integral from 0 to t of (t-s)*f(s) ds
由于您似乎假设y(0)=0
以及y'(0)=0
,因此可以在一次积分中获得所需的积分值,
simps((t-t_range)*signal, t_range)