2015-06-11 3 views
1

Я пытаюсь вычислить среднее значение для группы соседних точек в массиве, с которым я могу легко перемещаться. Я советовал определить вектор называется «трястись» целые числа, например, от 5 до 15. Heres кода я прямо сейчас:Средние вычисления для группы соседних точек в строке

import matplotlib.pyplot as plt 
import numpy as np 
from scipy.optimize import curve_fit 

x = np.arange(0,10,.05) 
wave = np.sin(x) 

noise = np.random.normal(0,.05,200) 
y = noise + wave 
noise2 = np.random.normal(0,.05,200) 
y2 = noise2 + wave 
noise3 = np.random.normal(0,.05,200) 
y3 = noise3 + wave 


y_avg = (np.array(y) + np.array(y2) + np.array(y3))/3 

for i in range(5, 15): 
    mean = np.mean(y_avg) 
print mean 


plt.plot(x, y, color = 'red', label= 'line 1') 
plt.plot(x, y2, color = 'pink', label = 'line 2') 
plt.plot(x, y3, color = 'magenta', label = 'line 3') 
plt.plot(x, y_avg, color = 'blue', label = 'average') 
plt.legend() 
plt.show() 

Есть ли лучший способ сделать это, что предполагает индексацию вектор данных/как это сделать?

+0

Является ли ваше решение недостаточным? – wwii

+0

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

ответ

0

Использование нарезка вектора:

mean = np.mean(y_avg[5:15]) 

Если вы хотите среднюю точку, это работает даже размер окна:

def mean_slice(midp, size, array): 
    slice_index = [midp - (size/2), midp + (size/2)] 
    # Remove out of bounds indexes 
    slice_index = [i if i > 0 else 0 for i in slice_index] 
    slice_index = [i if i < len(array) else 0 for i in slice_index] 
    return np.mean(array[slice(*slice_index)]) 

print mean_slice(1, 4, a) 
>>>1.0 
+0

Когда я использую «mean = np.mean (y_avg [4: 5:])», он печатает значение 0.2902 в качестве моего среднего значения, которое не может быть правильным, так как значение y графика отрицательно все время. Что-то не так с тем, что я делаю? –

+0

Ваш массив y_avg положителен на куске 4: 5 – kezzos

+0

Извините, вы правы. Спасибо за вашу помощь. Еще одна вещь, которая меня путает, - это то, почему я получаю разные значения для ' #calculating mean через np.mean y_avg = (np.array (y) + np.array (y2) + np.array (y3))/3 печати "означают calculation1", np.mean (y_avg [2: 6]) #calculating означает, через среднюю точку + размер защиту mean_slice (средняя точка, размер, массив): slice_index = [медианы - (размер/2), средняя точка + (размер/2)] return np.mean (array [slice (* slice_index)]) print "mean calculate2", mean_slice (4,2, y_avg) 'code' Это результат: средний расчет1 0.172668616537 средний расчет n2 0.204097947827 –

Смежные вопросы