是否有一种有效的python方式来窗口化数据?

时间:2017-05-30 07:58:07

标签: python

我有一个45000行和30列的时间序列数据。我想将这些数据分成沿行的长度为150的滚动窗口,并为每个窗口计算一些统计数据。

基本上,这意味着我首先将行0添加到149并计算每列的均值后跟std。然后我将行1到150再次分别为每列计算mean和std。我水平地为每列填充均值和std的向量。

目前我有以下功能:

def statFeaturesWindowed(data):
    dataLen = data.shape[0]
    count = 0
    winSize = 150

    ftVect = np.empty((1, 60))

    while count+winSize <= dataLen:
        if not count % 1000:
            print("Row {} of {}".format(count, dataLen-winSize))
        dataWin = data[count:count+winSize,:] # data window
        means = np.mean(dataWin, axis = 0) # mean
        stDev = np.std(dataWin, axis = 0) # standard deviation           

        tempVect = np.hstack((means, stDev)).T
        ftVect = np.vstack((ftVect, tempVect))
        count+=1

    np.delete(ftVect, (1), 0)

    return ftVect

然而,随着输出矩阵变得越来越大,这段代码非常慢并且变慢。目前运行45000行需要大约5分钟。有没有更有效的方法来做到这一点?

0 个答案:

没有答案