作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个大约 200,000 行的长数字时间序列数据(我们称之为 Z )。
在一个循环中,我子集 x (大约 30)个来自 的连续行Z 一次并将它们视为查询点 q .
我想在 内定位Z 是 (~300) 最相关的时间序列长度片段 x (与 q 最相关)。
什么是实现这一目标的有效方法?
最佳答案
下面的代码在我不太强大的 Windows 笔记本电脑上找到您正在寻找的 300 个片段并在 8 秒内运行,因此它应该足够快以满足您的目的。
首先,它构造一个 30×199971 矩阵 ( Zmat
),其列包含您要检查的所有长度为 30 的“时间序列段”。调用cor()
, 对向量 q
进行操作和矩阵Zmat
,然后计算所有所需的相关系数。最后,检查结果向量以识别具有最高相关系数的 300 个序列。
# Simulate data
nZ <- 200000
nq <- 30
Z <- rnorm(nZ)
q <- seq_len(nq)
# From Z, construct a 30 by 199971 matrix, in which each column is a
# "time series segment". Column 1 contains observations 1:30, column 2
# contains observations 2:31, and so on through the end of the series.
Zmat <- sapply(seq_len(nZ - nq + 1),
FUN = function(X) Z[seq(from = X, length.out = nq)])
# Calculate the correlation of q with every column/"time series segment.
Cors <- cor(q, Zmat)
# Extract the starting position of the 300 most highly correlated segments
ids <- order(Cors, decreasing=TRUE)[1:300]
# Maybe try something like the following to confirm that you have
# selected the most highly correlated segments.
hist(Cors, breaks=100)
hist(Cors[ids], col="red", add=TRUE)
关于R:有效地定位与输入段具有最大互相关性的时间序列段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9107791/
我是一名优秀的程序员,十分优秀!