时间序列数据的滑动窗口

时间:2017-06-27 21:17:22

标签: python numpy

我在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]]

看起来这些步骤也出现在幻灯片内容中,而不仅仅是幻灯片之间,我如何才能得到我想要的结果?

2 个答案:

答案 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_