https://github.com/cran/dtw
Raw File
Tip revision: d51529a8ee2827cd8c1bd7c4a9e0265dd0cc72cf authored by Toni Giorgino on 19 September 2022, 16:36:11 UTC
version 1.23-1
Tip revision: d51529a
dtw_test.Rout.save

R version 4.0.0 (2020-04-24) -- "Arbor Day"
Copyright (C) 2020 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin17.0 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> suppressPackageStartupMessages(library(dtw));
> 
> ### Synthetic example: check indexes, distance, cost matrix
> ldist<-matrix(1,nrow=6,ncol=6);  # Matrix of ones
> ldist[2,]<-0; ldist[,5]<-0;      # Mark a clear path of zeroes
> ldist[2,5]<-.01;		 # Forcibly cut the corner
> 
> ds<-dtw(ldist,keep=T);		 # DTW with user-supplied local cost matrix
> ds$distance			 # 2
[1] 2
> ds$index1
[1] 1 2 2 2 3 4 5 6 6
> ds$index2
[1] 1 2 3 4 5 5 5 5 6
> ds$costMatrix
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    3    4 4.00 5.00
[2,]    1    1    1    1 1.01 1.01
[3,]    2    2    2    2 1.00 2.00
[4,]    3    3    3    3 1.00 2.00
[5,]    4    4    4    4 1.00 2.00
[6,]    5    5    5    5 1.00 2.00
> 
> da<-dtw(ldist,step=asymmetric);	 # Also compute the asymmetric
> da$distance			 # 2
[1] 2
> da$index1			 # 1 2 3 4 5 6
[1] 1 2 3 4 5 6
> da$index2			 # 1 3 5 5 5 6
[1] 1 3 5 5 5 6
> 
> da<-dtw(ldist,step=asymmetricP0);	 # The strange aP0 alignment
> da$distance			 # 1
[1] 1
> da$index1			 # 1 2 2 2 2 3 4 5 6 6
 [1] 1 2 2 2 2 3 4 5 6 6
> da$index2			 # 1 1 2 3 4 5 5 5 5 6
 [1] 1 1 2 3 4 5 5 5 5 6
> 
> da<-dtw(ldist,step=asymmetricP1);	 # Multi-step
> da$distance			 # 3
[1] 3
> da$index1			 # 1 2 3 3 4 5 6
[1] 1 2 3 3 4 5 6
> da$index1s                       # 1 2 3 5 6
[1] 1 2 3 5 6
> da$index2			 # 1 2 3 4 5 5 6
[1] 1 2 3 4 5 5 6
> da$index2s			 # 1 2 4 5 6
[1] 1 2 4 5 6
> 
> ### Count paths
> stopifnot(countPaths(ds)==1683)     
> 
> ### Native vs non-native
> ds<- dtw:::globalCostMatrix(ldist)
> dsn<- dtw:::globalCostMatrix(ldist,native=FALSE)
Warning message:
In dtw:::globalCostMatrix(ldist, native = FALSE) :
  Native dtw implementation not available: using (slow) interpreted fallback
> stopifnot(all.equal(ds,dsn))		 # TRUE
> 
> 
> ###  Sine/cosine example: verify native output
> ### there may be a random chance of failing due to rounding errors
> idx<-seq(0,6.28,len=100);
> query<-sin(idx)+runif(100)/10;	
> template<-cos(idx)
> ldist<-outer(query,template,FUN=function(x,y){(x-y)^2})
> ds<- dtw:::globalCostMatrix(ldist)
> dsn<- dtw:::globalCostMatrix(ldist,native=FALSE)
Warning message:
In dtw:::globalCostMatrix(ldist, native = FALSE) :
  Native dtw implementation not available: using (slow) interpreted fallback
> all.equal(ds,dsn)		# TRUE
[1] TRUE
> 
> 
> ### Open begin-end matching
> query <- 2:3 + 0.01
> ref <- 1:4
> obe <- dtw(query,ref,open.begin=T,open.end=T,step=asymmetric)
> all.equal(obe$distance,0.02)    # TRUE
[1] TRUE
> all.equal(obe$index2,c(2,3))    # TRUE
[1] TRUE
> 
> 
> ### Use proxy::dist
> query <- cbind(1:10,1)
> ref <- cbind(11:15,2)
> cxdist <- proxy::dist(query,ref,method="Manhattan")
> d1 <- dtw(query,ref,dist.method="Manhattan")$distance
> d2 <- dtw(cxdist)$distance
> stopifnot(d1==d2)
> 
> 
> ### See if DTW is registered in proxy::dist
> lambda <- dist(query,ref,method="DTW")
> stopifnot(sum(lambda)==470)
> 
> 
> proc.time()
   user  system elapsed 
  0.792   0.065   0.844 
back to top