我正在尝试计算非常长时间序列的dtw距离,但是我得到一个错误,表明我无法为矩阵分配内存。
我在这做什么:
library(dtw)
set.seed(1234)
N <- 300000
x <- rnorm(N)
y <- rnorm(N)
dtw(x,y,distance.only=TRUE)$distance
Error: cannot allocate vector of size 670.6 Gb
有没有另一种方法来计算不需要分配如此多内存的dtw距离?
答案 0 :(得分:1)
我不知道这个包,但是来自你的包的companion paper:
较大的问题可以通过近似策略来解决,例如, 计算下采样时间序列之间的初步对齐 (Salvador and Chan 2004);索引(Keogh and Ratanamahatana 2005);要么 将其中一个序列分成块然后迭代 子序列匹配。
后一种选择可以通过以下方式实现:
lapply(split(y,1:100), ## I split y in 100 chnucks
function(z)dtw(x,z,distance.only=TRUE)$distance)
PS:这里的大一点,意味着超过8000×8000点(接近虚拟内存限制)的问题,这就是你的情况。