当前位置: 源码素材网 » Python教程 » 详情页

Python 时间序列的时间延迟计算

  •   时间:2018-12-08
  • 概述:随机数 时间序列 延迟 自相关法

 Python自相关法求时间延迟,混沌时间序列分析源程序,时间序列的时间延迟计算,用户输入时间序列以及最大时间延迟,可返回所求时间序列的时间延迟,在测试的过程中,生成随机数字序列用于测试具体实现方法请看如下的代码段:

import numpy as np
import matplotlib.pyplot as plt
import random
import matplotlib as mpl
import warnings
#混沌时间序列分析源程序
#download by http://www.codesc.net
#时间序列的时间延迟计算
def autocorrelation(data,tau_max):
    """#data:输入的时间序列
    #tau_max:最大时间延迟
    #Tau:返回所求时间序列的时间延迟"""
    N=len(data)
    #时间序列长度
    x_mean=np.mean(data)
    #时间序列的平均值
    data=data-x_mean
    SSd=np.dot(data,data)
    R_xx=np.zeros((1,tau_max))[0]#=zeros(1,tau_max)
    #自相关函数初始化
    for tau in range(0,tau_max):#1:tau_max
    #计算自相关函数
            for ii in range(0,N-tau):#1:N-tau
                #print(tau,ii,ii+tau,N)
                R_xx[tau] = R_xx[tau]+data[ii]*data[ii+tau]#
            R_xx[tau]=R_xx[tau]/SSd
    ##end
    #print(len(R_xx))
    print(R_xx)
    #print(np.arange(1,tau_max+1))
    plt.plot(np.arange(1,tau_max+1),R_xx) #plot(1:tau_max,R_xx);
    #plt.show()##hold on
    #作自相关函数图
    plt.plot([1,tau_max],[0,0])#line([1,tau_max],[0,0])
    plt.title('自相关法求时间延迟')
    plt.ylabel('自相关函数')
    plt.xlabel('时间延迟') ;plt.show()#
    Tau=0
    #求时间序列的时间延迟
    R_tau = list(map(lambda x:x>=0,R_xx))
    #print(R_tau)
    jj = 0;R_jj =R_tau[0]
    while jj < tau_max:
        jj = jj+1
        if R_jj!=R_tau[jj]:
            break
    tau = jj
    #print('tau jj:',tau)
    if abs(R_xx[jj-1])>abs(R_xx[jj]):
        Tau=Tau+1
        #print('tau ok:',tau)
    '''jj = 0
    while jj < tau_max:#for jj in range(1,tau_max):#2:tau_max
        jj = jj+1#print(jj)
        Tau=jj;print(Tau)
        print(R_xx[jj-1],R_xx[jj],R_xx[jj-1]*R_xx[jj])
        if R_xx[jj-1]*R_xx[jj]<=0:
            print(jj)
            if abs(R_xx[jj-1])>abs(R_xx[jj]):
                pass#Tau=jj;print('tau1:',tau) #break
            else:
                Tau=Tau-1#Tau=jj-1;print('tau2:',tau)#break
            print('tau:',tau);break'''
    #end
    #end
    #end
    print('tau:',tau)
    return tau
#生成随机数字序列用于测试
def gen_series(n):
    result = []
    for i in range(n):
        t = random.randint(0,99)#random.uniform(1, 10)#random.random()#random.randint(0,50)#uniform(1, 3)
        #随机浮点数random.random() #random.uniform(1, 10)
        #随机字符:random.choice('abcdefg&##^*f')#多个字符中选取特定数量的字符:random.sample('abcdefghij',3)
        #随机整数:random.randint(0,99)#随机选取0到100间的偶数:random.randrange(0, 101, 2)
        result.append(t)
    print(result)
    return result
if __name__ == "__main__":
#解决中文的问题
    mpl.use('TkAgg')
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['font.family']='sans-serif'
    #解决负号'-'显示为方块的问题
    mpl.rcParams['axes.unicode_minus'] = False
    x = gen_series(100)
    print('autocorrelation:')
    print(autocorrelation(x,20))

    相关内容:

    相关声明:

      若“Python 时间序列的时间延迟计算”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。