# tests/dtw_test.R In dtw: Dynamic Time Warping Algorithms

```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;		 # Forcely cut the corner

ds<-dtw(ldist,keep=T);		 # DTW with user-supplied local cost matrix
ds\$distance			 # 2
ds\$index1			 # 1 2 2 2 2 3 4 5 6 6
ds\$index2			 # 1 1 2 3 4 5 5 5 5 6
ds\$costMatrix

da<-dtw(ldist,step=asymmetric);	 # Also compute the asymmetric
da\$distance			 # 2
da\$index1			 # 1 2 3 4 5 6
da\$index2			 # 1 3 5 5 5 6

da<-dtw(ldist,step=asymmetricP0);	 # The strange aP0 alignment
da\$distance			 # 1
da\$index1			 # 1 2 2 2 2 3 4 5 6 6
da\$index2			 # 1 1 2 3 4 5 5 5 5 6

### Count paths
stopifnot(countPaths(ds)==1683)

### Native vs non-native
ds<- dtw:::globalCostMatrix(ldist)
dsn<- dtw:::globalCostMatrix(ldist,native=FALSE)
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)
all.equal(ds,dsn)		# 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
all.equal(obe\$index2,c(2,3))    # 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)
```

## Try the dtw package in your browser

Any scripts or data that you put into this service are public.

dtw documentation built on May 18, 2018, 9:03 a.m.