@jit
def DTWDistance2(s1, s2){
inf = 999999999999
size1=size(s1)
size2=size(s2)
if(size1 * size2 < 0){
return -1.0 //overflow
}
dtw = array(DOUBLE, size1*size2)
for(i in 0:size(s1)) dtw[i*size2] = inf
for(j in 0:size(s2)) dtw[j*size1] = inf
dtw[0]=0
for (i in 1:size(s1)){
for (j in 1:size(s2)){
dist = square(s1[i]-s2[j])
dtw[i*size2+j]= dist+min([dtw[(i-1)*size2+j], dtw[i*size2+j-1], dtw[(i-1)*size2+j-1]])
}
}
//print(dtw)
return sqrt(dtw[(size1-1)*size2 + size2-1])
}
s1=1..1000
s2=1..5000
DTWDistance2(s1, s2)