我有一个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分钟。有没有更有效的方法来做到这一点?