说明:计算并存储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的使用情况。即使我已经测试过几个值,我还没有得到为什么这个练习有问题。我只是误解了什么吗?
答案 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;
}"
)