2013-03-28 68 views
1

我是熊猫新手。我有一个时间序列数据。我怎样才能轻松完成以下操作?熊猫时间系列作业

我有一个称为输入的2d矩阵。每行有5个元素。有大量的行(千)

input[t,:] = [f1, f2, f3, f4, f5]

(1)我需要计算样本之间的相对差异。

rel[t,:] = (input[t,:]-input[t-1,:])/input[t-1,:]

(2)我需要创建一个大小80

win[t,:] = [rel[t,:],rel[t-1,:],...,rel[t-79,:]]

的滑动窗口,我怎么能这样做的熊猫,或者任何其他的框架,如scikit 。时间序列。

回答

2

您既可以在纯numpy的做,虽然大熊猫大概会具有使其更容易的特定功能。但是:

rel = np.diff(input)/input[:-1] 

from numpy.lib.stride_tricks import as_strided 
win = as_strided(rel, shape=(rel.shape[0]-79, 80), strides=rel.strides*2) 

将做到这一点。


如果输入了多行,你仍然可以做到以上为:

rel = np.diff(input, axis=1)/input[:, :-1] 
win = as_strided(rel, shape=(rel.shape[0], rel.shape[1]-79, 80), 
       strides=rel.strides + rel.strides[1:]) 

虽然你可能要玩的“形状”和匹配strides得到确切的窗口后的形状。

+0

这看起来不错,会尝试测试它 – siamii

+0

如果输入有'k'尺寸怎么办? – siamii

+0

@siamii您要如何计算相对差异或窗口k维数据?它当然可以完成,但是你需要确定你想要做什么。 – Jaime