Среднее значение у в вертикальной ячейке

Итак, у меня есть данные фондового рынка (дата от 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]))

Который работает нормально, однако мне нужно также как-то определить среднее значение y значения в каждом бине.

Я полагаю, что это как-то возможно, ссылаясь на x значения в ZippedList[0,i]и y значения как ZippedList[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])

Затем я уничтожаю любые отрицательные значения частоты и соответствующие значения БПФ, используя:

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 в каждой ячейке. Синяя линия - это полиномиальное соответствие 2-го порядка.

Очевидно, что со случайными данными это будет немного отличаться от ссылки, которую я разместил ниже, но это дает представление.

Схематическое изображение

2 ответа

Я все обдумывал....

Я смог рассчитать средние значения 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]))

Не совсем уверен, что вы просите, но, возможно, 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
Другие вопросы по тегам