2017-01-10 38 views
1

說明:計算並存儲R = 1000個隨機值,從0-1開始爲x。 move_window_average(x,n_neighbors)從3a預先加載到內存中。計算n_neighbors 1-9範圍內x的移動窗口平均值。商店X以及每個平均值爲被叫Y.平滑值(1-9之間的鄰居)

連續名單列表的我的解決辦法:

R = 1000 
n_neighbors = 9 

x = [random.uniform(0,1) for i in range(R)] 
Y = [moving_window_average(x, n_neighbors) for n_neighbors in range(1,n_neighbors)] 

其中moving_window_average(X,N_NEIGHBORS)是一個功能如下:

def moving_window_average(x, n_neighbors=1): 
    n = len(x) 
    width = n_neighbors*2 + 1 
    x = [x[0]]*n_neighbors + x + [x[-1]]*n_neighbors 
    # To complete the function, 
    # return a list of the mean of values from i to i+width for all values i from 0 to n-1. 
    mean_values=[] 
    for i in range(1,n+1): 
     mean_values.append((x[i-1] + x[i] + x[i+1])/width) 
    return (mean_values) 

這給了我一個錯誤,再次檢查你的用法。即使我已經測試了幾個值,但我還沒有得到爲什麼這個練習有問題。我只是誤解了一些東西?

回答

1

指令告訴你移動計算所有鄰居的範圍從1到9的平均所以下面的代碼應該工作:

import random 

random.seed(1) 

R = 1000 
x = [] 
for i in range(R): 
    num = random.uniform(0,1) 
    x.append(num) 

Y = [] 

Y.append(x) 

for i in range(1,10): 
    mov_avg = moving_window_average(x, n_neighbors=i) 
    Y.append(mov_avg) 
0

其實你moving_window_average(list, n_neighbors)功能是不會有N_NEIGHBORS大於一個工作,我的意思是,口譯員不會說出任何事情,但是你沒有對你提出的問題表達正確的看法。我建議你使用類似的東西:

def moving_window_average(x, n_neighbors=1): 
    n = len(x) 
    width = n_neighbors*2 + 1 
    x = [x[0]]*n_neighbors + x + [x[-1]]*n_neighbors 

    mean_values = [] 
    for i in range(n): 
     temp = x[i: i+width] 
     sum_= 0 
     for elm in temp: 
      sum_+= elm 
     mean_values.append(sum_/width) 

    return mean_values