2014-12-02 61 views
1

所以我有股票市場數據(日期從0開始,&一個收盤價),並用這個我用numpy.fft來計算快速傅里葉變換和相應的頻率,然後得到這些以壓縮列表的形式,'FFT,頻率'。垂直bin中的y值的均值

logbins = np.logspace(Min(logX),max(logX),numbins=10, base=10.0 

我那麼數字化的頻率值到這些箱和使用:

for k in range(1,len(freqlogbins)): 
    mean_freq.append(np.mean(Tfreq2[freqdig==k])) 

的正常工作,但是我也需要以某種方式制定出我已經頻率值使用分成垂直數箱每個bin中的值的平均值爲y

我想這是某種可以參照的ZippedList[0,i]x值和yZippedList[1,i]

,但不能完全解決如何。

下面是可複製的代碼的示例:

import numpy as np 

T_date0=np.arange(0,400) 
T_price=np.random.uniform(100,400, size=400) 

T_fft=np.fft.fft(T_price) 
Tfreq=np.fft.fftfreq(T_date0.shape[-1]) 

我然後使用消除任何負頻率值和相應的FFT值:

Tfreq2=[] 
T_fft2=[] 
for i in range(len(Tfreq)):        
    if Tfreq[i]>0: 
     Tfreq2.append(Tfreq[i]) 
     T_fft2.append(T_fft[i])  
T_fft_absSq=(np.absolute(T_fft2))**2 
logTFAS=np.log10(T_fft_absSq) 
logTfreq=np.log10(Tfreq2) 

numbins=10 
logbins=np.logspace((min(logTfreq)-0.00000001),(max(logTfreq)+0.00000001),num=numbins, base=10.0) #The +/-0.00000001 are so that the endpoints lie in the bin intervals. 

Tfreq2=np.array(Tfreq2) 
TFAS=np.array(T_fft_absSq) 

freqdig=np.digitize(Tfreq2,logbins) 
mean_freq=[] 
mean_fft=[] 
for k in range(1,len(logbins)): 
mean_freq.append(np.mean(Tfreq2[freqdig==k])) 

Fourier=zip(logTfreq,logTFAS) 
##This is where I need to work out the mean of the y values, in the vertical bins 

下面是數據的模樣,其中,所述黑色虛線表示垃圾箱,黃色虛線表示每個垃圾箱中x值的平均值。藍線是二階多項式擬合。

顯然,隨機數據看起來有點不同於我在下面發佈的鏈接,但它提供了一個想法。

Diagrammatic representation

+1

你能寫下一個複製粘貼可運行的例子,填充所有的變量(假/隨機數據是好的),並導入你正在使用的模塊?例如,我們不知道'Tfreq2'和'freqdig'是什麼。 – YXD 2014-12-02 14:48:56

+0

歡呼聲,編輯了一個更清晰的描述 – 2014-12-02 18:27:23

回答

0

不太清楚你問什麼,但也許np.digitize將幫助:

import numpy as np 
d = np.random.random(1000) 
bins = np.linspace(0, 1, 10) 
dig = np.digitize(d, bins) 
binmean = [d[dig == i].mean() for i in range(1, len(bins))] 

print binmean 
+0

這對於計算每個bin中的平均頻率非常有效,這是用黃色的黃色垂直線繪製的,但我需要計算bin中的平均FFT值 – 2014-12-02 18:47:10

1

我一切得太多....

我能夠計算在y以非常相似的方式進行平均值平均,使用頻率合併:

for k in range(1,len(logbins)): 
    mean_freq.append(np.mean(np.array(logTfreq)[freqdig==k])) 
    mean_fft.append(np.mean(np.array(logTFAS)[freqdig==k]))