垂直仓中y值的平均值

时间:2014-12-02 14:30:53

标签: python numpy binning

所以我有股票市场数据(从0开始的日期,以及收盘价),我用numpy.fft计算快速傅里叶变换和相应的频率,然后将这些数据以压缩的形式出现列表,' FFT,频率'。我将频率值分为垂直对数区间:

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值的平均值。

我想在某种程度上可能会引用x中的ZippedList[0,i]值,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

2 个答案:

答案 0 :(得分: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]))

答案 1 :(得分: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