我在python 3.5上有一个滑动窗口,它使用了很长时间的系列数据,到目前为止我有很好的结果,但我只需要确定我的滑动窗口是否正常工作。所以我决定测试一个简单的数据可以在这里看到。
var name = prompt("Name?");
console.log("Hello " + name);
// Force a 10 millisecond delay before running the rest of the code.
setTimeout(function(){
var age = prompt("Age?");
console.log(name + " is " + age + " years old");
}, 10);
我的打印输出结果
[[1 2 3] [2 3 4] [3 4 5] [4 5 6] [5 6 7] [6 7 8] [7 8 9]]
我希望我的输出看起来像
[[1 2 3] [4 5 6] [7 8 9]]
所以我尝试了3步,但我得到了
[[1 4 7]]
看起来这些步骤也出现在幻灯片内容中,而不仅仅是幻灯片之间,我如何才能得到我想要的结果?
答案 0 :(得分:2)
import numpy as np
import itertools as it
x=[1,2,3,4,5,6,7,8,9]
def moving_window(x, length, step=1):
streams = it.tee(x, length)
return zip(*[it.islice(stream, i, None, step*length) for stream, i in zip(streams, it.count(step=step))])
x_=list(moving_window(x, 3))
x_=np.asarray(x_)
print(x_)
您需要it.islice(stream, i, None, step*length)
来获得所需的输出
答案 1 :(得分:0)
似乎可以有一种更简单的方法来实现您尝试做的事情。您可以使用python range
函数生成所需的索引,如下所示;
import numpy as np
def moving_window(x, length):
return [x[i: i + length] for i in range(0, (len(x)+1)-length, length)]
x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
x_ = moving_window(x, 3)
x_ = np.asarray(x_)
print x_
然而,如果不是使用np.asarray
而是首先接受numpy数组输入,并且你想要的只是一个2D窗口输出(基本上只是一个矩阵),那么你的问题就等于重塑一个数组;
import numpy as np
def moving_window(x, length):
return x.reshape((x.shape[0]/length, length))
x = np.arange(9)+1 # numpy array of [1, 2, 3, 4, 5, 6, 7, 8, 9]
x_ = moving_window(x, 3)
print x_