Python:查找两列数据的周期

Python:查找两列数据的周期,python,fft,dft,Python,Fft,Dft,这个问题看起来很琐碎,但我没有找到任何合适的答案,所以我在问 假设我有一个两列数据(比如,{x,sin(x)}) xy(X) 0.0 0.0 0.1 0.099 0.20.1986 如何求函数Y(X)的周期 我在数学方面有一些经验,大致上 我只是把数据插值为一个函数,比如y(x),然后 计算y'(x)并设置y'(x_p)=0 收集所有(x_p+1-x_p)并取平均值以获得周期 然而,在python中,我在第1步之后被卡住了,因为我可以找到特定猜测值的x_p,但不是所有的x_p。而且这个过程对我来

这个问题看起来很琐碎,但我没有找到任何合适的答案,所以我在问

假设我有一个两列数据(比如,{x,sin(x)})

xy(X)
0.0 0.0
0.1 0.099
0.20.1986

如何求函数Y(X)的周期

我在数学方面有一些经验,大致上

  • 我只是把数据插值为一个函数,比如y(x),然后

  • 计算y'(x)并设置y'(x_p)=0

  • 收集所有(x_p+1-x_p)并取平均值以获得周期


  • 然而,在python中,我在第1步之后被卡住了,因为我可以找到特定猜测值的x_p,但不是所有的x_p。而且这个过程对我来说也不是很优雅。在python中有更好的方法吗?

    对于计算周期,我只需找到傅里叶变换数据的峰值,在python中,请查看script.fft。可能需要大量计算。

    您只有3个数据点吗?如果没有,您的x值是如何分布的?此外,您是否拥有“无噪声”数据,或者算法是否必须对噪声具有鲁棒性?速度对你有多重要?我有更多的数据点…比如说100K或更多。例如,x值是numpy.linspane(0、10000、100000)。你可以把sin(x)作为一个原型。我不需要考虑任何噪音,速度很重要,但解决问题现在是当务之急。你能添加一些细节,如果可能的话,举例说明如何找到一个数据的周期(比如,{x,sin(x)})。你的时间步长是等距的吗?是的,时间步长是等距的。在这种情况下,您将获得数据的第二列(即data[:,1]),并运行script.fft not that并找到最大参数:
    argmax(scipy.fft(data[:,1]))
    您必须通过偏离xedit的最大值来重新缩放:您将需要更大的绝对值,即
    argmax(abs(scipy.fft(data[:,1]))/max(data[0: