此函數允許估計時間序列的熵。它基于Lempel-Ziv壓縮算法。對于長度為n的時間序列,熵估計為:
E=(1/n和L_i)^-1 ln(n)
式中,L逯i是從位置i開始的最短子串的長度,該子串之前沒有從位置1出現到i-1。當n接近無窮大時,估計的熵收斂到時間序列的實熵。在
我想用Python實現is,我是這樣做的:def contains(small, big):
for i in range(len(big)-len(small)+1):
if big[i:i+len(small)] == small:
return True
return False
def actual_entropy(l):
n = len(l)
sequence = [l[0]]
sum_gamma = 0
for i in range(1, n):
for j in range(i+1, n+1):
s = l[i:j]
if contains(s, sequence) != True:
sum_gamma += len(s)
sequence.append(l[i])
break
ae = 1 / (sum_gamma / n ) * math.log(n)
return ae
但是,我發現當數據越來越大時,它的計算速度太慢了。例如,我使用了一個包含23832個元素的列表作為輸入,所消耗的時間如下:(data can be foundhere)
^{pr2}$
我有成千上萬的這樣的名單要計算,這么長的時間是無法忍受的。我應該如何優化此功能并使其更快地工作?在