Python 时间序列运算
我对熊猫不熟悉。我有一个时间序列数据。我怎样才能轻松地执行以下操作 我有一个叫做输入的2d矩阵。每行有5个元素。那里有很多排 输入[t,:]=[f1,f2,f3,f4,f5] 1我需要计算样本之间的相对差异 i、 e.rel[t,:]=input[t,:]-input[t-1,:]/input[t-1,:] 2我需要创建一个尺寸为80的滑动窗口 i、 e.赢[t,:]=[rel[t,:],rel[t-1,:],…,rel[t-79,:]]Python 时间序列运算,python,scipy,pandas,time-series,Python,Scipy,Pandas,Time Series,我对熊猫不熟悉。我有一个时间序列数据。我怎样才能轻松地执行以下操作 我有一个叫做输入的2d矩阵。每行有5个元素。那里有很多排 输入[t,:]=[f1,f2,f3,f4,f5] 1我需要计算样本之间的相对差异 i、 e.rel[t,:]=input[t,:]-input[t-1,:]/input[t-1,:] 2我需要创建一个尺寸为80的滑动窗口 i、 e.赢[t,:]=[rel[t,:],rel[t-1,:],…,rel[t-79,:]] 我如何在Pandas或任何其他框架(如scikit.ti
我如何在Pandas或任何其他框架(如scikit.timeseries)中做到这一点。这些文档对这些类型的操作非常全面 见: 一,
2这些文件对这些类型的操作非常全面 见: 一,
2您可以用普通的numpy实现这两个功能,尽管熊猫可能会有特定的功能使其更简单。但是:
rel = np.diff(input) / input[:-1]
及
我会的
如果输入有多行,您仍可以按以下方式执行上述操作:
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:])
尽管你可能想玩“形状”和匹配的步幅,以获得你想要的确切窗口形状。你可以在普通numpy中同时做这两件事,尽管熊猫可能会有特定的功能,使它更容易。但是:
rel = np.diff(input) / input[:-1]
及
我会的
如果输入有多行,您仍可以按以下方式执行上述操作:
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:])
尽管您可能想通过“形状”和匹配的步幅来获得您想要的确切窗口形状。如果输入有k维,该怎么办?@siamii您希望如何准确计算相对差异或窗口k维数据?当然可以,但是你需要定义你想要做什么。我的意思是输入有k列。因此,不是每行1个元素,而是每行有k个元素。每行代表一个时间步。我的数据是2d矩阵。我更新了问题谢谢,但我想我解释得不够清楚。你最初的答案很好,每个元素都有k个特征。我需要计算时间步长之间的差异和窗口。我认为您的follwup答案是水平计算功能之间的差异,而不是垂直计算时间步长之间的差异。正当在原始答案中,您可能只需要更改shape=rel.shape[0]-79,80*k,但我不确定。如果输入有k维,该怎么办?@siamii您希望如何准确计算相对差异或打开k维数据的窗口?当然可以,但是你需要定义你想要做什么。我的意思是输入有k列。因此,不是每行1个元素,而是每行有k个元素。每行代表一个时间步。我的数据是2d矩阵。我更新了问题谢谢,但我想我解释得不够清楚。你最初的答案很好,每个元素都有k个特征。我需要计算时间步长之间的差异和窗口。我认为您的follwup答案是水平计算功能之间的差异,而不是垂直计算时间步长之间的差异。正当也许你需要改变的是shape=rel.shape[0]-79,80*k,但我不确定。