C++ implementation
Examples
c <- list(c(1,1,2,3,2,3), c(1,1,1,2,3,3),c(2,2,1,1,1,1))
similarityMat_nocostC(sapply(c, "["))
#> $similarity
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 1.0000000 1.0000000 0.3333333 0.0000000 0.0000000 0.0000000
#> [2,] 1.0000000 1.0000000 0.3333333 0.0000000 0.0000000 0.0000000
#> [3,] 0.3333333 0.3333333 1.0000000 0.3333333 0.6666667 0.3333333
#> [4,] 0.0000000 0.0000000 0.3333333 1.0000000 0.3333333 0.6666667
#> [5,] 0.0000000 0.0000000 0.6666667 0.3333333 1.0000000 0.6666667
#> [6,] 0.0000000 0.0000000 0.3333333 0.6666667 0.6666667 1.0000000
#>
c2 <- list()
for(i in 1:10){
c2 <- c(c2, list(rmultinom(n=1, size=1000, prob=rexp(n=1000))))
}
c3 <- sapply(c2, "[")
if(require(microbenchmark)){
library(microbenchmark)
microbenchmark(similarityMat(c3), similarityMat_nocostC(c3), times=2L)
}else{
cat("package 'microbenchmark' not available\n")
}
#> Unit: milliseconds
#> expr min lq mean median
#> similarityMat(c3) 127.737803 127.737803 128.250969 128.250969
#> similarityMat_nocostC(c3) 6.956227 6.956227 7.361623 7.361623
#> uq max neval
#> 128.764136 128.764136 2
#> 7.767018 7.767018 2