Python - SciPy:从一组定期点预测

时间:2013-02-11 07:11:04

标签: python scipy fft

我正在学习SciPy,如果找到合适的功能,我的问题应该很容易解决: 我有一组覆盖10个时期的点(2D)。我想预测下一个时期的价值。

我想我必须创建一个与我的点相对应的周期函数,然后在这个模型上取点,但是我找不到怎么做!

你能帮帮我吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

外推绝非易事。它几乎总是很差,除非你对数据有一些强烈的假设。

在你的情况下,你可以尝试一下,但我认为没有立即可用的东西。

我试试:

  • 确定自相关的第一个最大值
  • 通过将此信号的倍数移动来扩展您的信号

如果需要,请在之后进行插值。

示例:

import numpy as np
import matplotlib.pyplot as plt

def autocorr(x):
    result = np.correlate(x, x, mode='full')
    return result[result.size/2:]

data = np.sin(np.linspace(0,30,300)) + np.random.random((300)) * 0.1

plt.subplot(3,1,1)
#plt.plot(data,"b-")
plt.plot(data,"bx")

acorr = autocorr(data)
acorr_diff = np.diff(acorr)

maxima = [i+1 for i in range(acorr_diff.shape[0]-1) 
          if acorr_diff[i]>=0 and acorr_diff[i+1]<0]


plt.subplot(3,1,2)
plt.plot(acorr)
for m in maxima:
    plt.axvline(m, color="b", alpha=0.5)

first_max = maxima[0]
new_data = np.hstack([data[:4*first_max],data])

plt.subplot(3,1,3)
plt.plot(data)
#plt.plot(data,"b-", alpha=0.1)
plt.plot(data,"bx")
plt.plot(new_data,"r-")
#plt.plot(new_data,"rx")

plt.show()

Output

这只是一个非常基本的实现。当然,它有局限性,但原则应该是明确的。