平滑值(1-9之间的邻居)

时间:2017-01-10 20:06:56

标签: python-3.x

说明:计算并存储R = 1000个0-1的随机值作为x。 moving_window_average(x,n_neighbors)从3a预先加载到内存中。计算x的移动窗口平均值为n_neighbors 1-9的范围。将x以及每个平均值存储为名为Y的列表中的连续列表。

我的解决方案:

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)

这给了我一个错误,再次检查您对Y的使用情况。即使我已经测试过几个值,我还没有得到为什么这个练习有问题。我只是误解了什么吗?

3 个答案:

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

答案 1 :(得分:0)

实际上你的moving_window_average(list, n_neighbors)函数不适用于大于1的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

答案 2 :(得分:0)

我的+ 100XP解决方案

cppFunction("NumericVector adjust_cpp (NumericVector y, double k, NumericVector ctrl) {
          int n = y.size();
        NumericVector z(n);
        int i; double *p1, *p2, *p3, *end = &z[n];
        double tmp = 1.0;
        for (i = 0; i < n; i++) {
        for (p1 = &z[i], p2 = &y[0], p3 = &ctrl[0]; p1 < end; p1++, p2++, p3++) {
          *p1 += tmp * (*p2);
          *p1 *= *p3;
        }
        tmp *= k;
        }
        return z;
        }"
)