R:循环遍历多个时间序列向量的可能组合来计算DTW
R: Loop through possible combinations of multiple time series vectors to calculate DTW
我是 R 和时间序列的新手。假设我有 5 个时间序列向量(具有不同的长度),我想使用动态时间规整找到它们之间的相似性。如您所知,DTW 只比较 2 个时间序列。我需要通过 5 次访问中的每一对(10 对)来计算距离然后比较它们。
使用DTW package,此代码仅适用于两个时间序列。
v1<-c(358.214, 359.240, 360.039, 361.163, 361.164, 362.113, 362.114)
v2<-c(392.664, 414.588, 414.589, 421.463, 421.464, 427.863)
v3<-c(470.776, 470.777, 471.951, 471.952, 477.651, 477.652, 479.601, 479.602, 480.426, 480.427)
v4<-c(639.000, 650.574, 650.575, 658.199, 658.200, 658.696)
v5<-c(678.846, 678.847, 688.121, 688.122, 690.371, 690.372, 701.946, 701.947, 704.921)
dtw1 <-dtw(v1, v2, dist.method="Euclidean", keep.internals = T, step.pattern= asymmetric)
plot(dtw1)
我不知道如何浏览每一对。我不认为 for loop 是这里的最佳选择。计算距离后,我应该将它们存储在矩阵中以进行比较吗?
计算这些向量所有可能对的最佳方法是什么?
将所有向量放入一个列表中,然后使用combn
创建它们的所有可能组合并将结果存储在一个列表中。
library(dtw)
list_vec <- list(v1, v2, v3, v4, v5)
result <- combn(list_vec, 2, function(x) {
dtw(x[[1]], x[[2]], dist.method="Euclidean",
keep.internals = TRUE, step.pattern= asymmetric)
}, simplify = FALSE)
我是 R 和时间序列的新手。假设我有 5 个时间序列向量(具有不同的长度),我想使用动态时间规整找到它们之间的相似性。如您所知,DTW 只比较 2 个时间序列。我需要通过 5 次访问中的每一对(10 对)来计算距离然后比较它们。
使用DTW package,此代码仅适用于两个时间序列。
v1<-c(358.214, 359.240, 360.039, 361.163, 361.164, 362.113, 362.114)
v2<-c(392.664, 414.588, 414.589, 421.463, 421.464, 427.863)
v3<-c(470.776, 470.777, 471.951, 471.952, 477.651, 477.652, 479.601, 479.602, 480.426, 480.427)
v4<-c(639.000, 650.574, 650.575, 658.199, 658.200, 658.696)
v5<-c(678.846, 678.847, 688.121, 688.122, 690.371, 690.372, 701.946, 701.947, 704.921)
dtw1 <-dtw(v1, v2, dist.method="Euclidean", keep.internals = T, step.pattern= asymmetric)
plot(dtw1)
我不知道如何浏览每一对。我不认为 for loop 是这里的最佳选择。计算距离后,我应该将它们存储在矩阵中以进行比较吗? 计算这些向量所有可能对的最佳方法是什么?
将所有向量放入一个列表中,然后使用combn
创建它们的所有可能组合并将结果存储在一个列表中。
library(dtw)
list_vec <- list(v1, v2, v3, v4, v5)
result <- combn(list_vec, 2, function(x) {
dtw(x[[1]], x[[2]], dist.method="Euclidean",
keep.internals = TRUE, step.pattern= asymmetric)
}, simplify = FALSE)