(速度挑战)根据通用汉明距离,有没有更快的方法来计算距离矩阵?

托马斯·艾斯科丁

我正在寻找一种更有效的方法来获取汉明距离的距离矩阵

背景资料

我知道hamming.distance()包中有一个函数e1071来计算距离矩阵,但是我怀疑当涉及到一个有很多行的大矩阵时,它可能会非常慢,因为它应用了嵌套for循环来进行计算。

到目前为止,我methodB在下面的代码中有一个更快的方法(请参阅参考资料)。但是,它仅适用于二进制域,即{0,1}^n但是,当遇到包含两个以上元素(即)的域时,此功能不可用{0,1,2,...,K-1}^n从这个意义上讲,methodB不是针对一般的汉明距离。

目的

我的目标是找到一种具有以下功能的方法:

  • 由仅来自基数R的函数组成(不Rcpp用于重写函数以加快速度)
  • 比我methodB()的特殊情况k=2
  • 可以推广为任何正整数 k
  • 超越hamming.distance()打包速度e1071

我的密码

library(e1071)
# vector length, i.e., number of matrix
n <- 7
# number of elements to consist of domain {0,1,...,k-1}^n
k <- 2
# matrix for computing hamming distances by rows
m <- as.matrix(do.call(expand.grid,replicate(n,list(0:k-1))))

# applying `hamming.distance()` from package "e1071", which is generic so it is available for any positive integer `k`
methodA <- function(M) hamming.distance(M)
# my customized method from base R function `dist()`, which is not available for cases `k >= 2`
methodB <- function(M) as.matrix(round(dist(M,upper = T,diag = T)**2))

而基准给出

microbenchmark::microbenchmark(
  methodA(m),
  methodB(m),
  unit = "relative",
  check = "equivalent",
  times = 50
)

Unit: relative
       expr      min       lq   mean   median       uq      max neval
 methodA(m) 33.45844 33.81716 33.963 34.30313 34.92493 14.92111    50
 methodB(m)  1.00000  1.00000  1.000  1.00000  1.00000  1.00000    50

预先赞赏!

nēminem
methodM <- function(x) {
  xt <- t(x)
  sapply(1:nrow(x), function(y) colSums(xt != xt[, y]))
}
microbenchmark::microbenchmark(
  methodB(m), methodM(m),
  unit = "relative", check = "equivalent", times = 50
)
# Unit: relative
#       expr  min       lq     mean   median       uq      max neval cld
# methodB(m) 1.00 1.000000 1.000000 1.000000 1.000000 1.000000    50  a 
# methodM(m) 1.25 1.224827 1.359573 1.219507 1.292463 4.550159    50   b

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

(速度挑战)用欧几里德距离来计算两个矩阵行之间的距离矩阵的更快方法?

来自分类Dev

简单快速的方法来计算二进制整数到0的汉明距离?

来自分类Dev

有没有更快的方法来 grep 模式或提高 while 循环的速度?

来自分类Dev

有没有更快的方法来计算每小时挑选的 pcs 的总和

来自分类Dev

计算两个整数矩阵/数据帧的所有行之间的成对汉明距离

来自分类Dev

有没有更快的方法来计数XmlNodeList

来自分类Dev

有效使用python计算汉明距离

来自分类Dev

使用`dplyr`计算有效汉明距离

来自分类Dev

有没有通用的方法来打印变量?

来自分类Dev

有没有更好的方法来计算重量

来自分类Dev

有没有比pow()更快的方法来在C ++中计算10的整数次幂?

来自分类Dev

快速计算汉明距离

来自分类Dev

有没有一种有效的方法来测量单个点到大量点中每个点的距离?

来自分类Dev

有没有更快,更有效的方法来保存python字典?

来自分类Dev

有没有更快的方法来对SortedList进行正则表达式?

来自分类Dev

有没有比cURL更快/更好的方法来检查URL是否可访问?

来自分类Dev

有没有更快的方法来检测游戏功能?

来自分类Dev

有没有更快的方法来获得相同的结果?

来自分类Dev

有没有一种更快的方法来检查数字是否在间隔内?

来自分类Dev

有没有更快的方法来添加我的多对多DBIC关系?

来自分类Dev

有没有一种更快的方法来在atom中执行拼写检查?

来自分类Dev

有没有更快的方法来建立多个子目录?

来自分类Dev

有没有更快的方法来达到相同的结果?

来自分类Dev

有没有更快的方法来实现此循环功能?

来自分类Dev

有没有更快的方法来检查列表中的列表是否等效?

来自分类Dev

有没有更快的方法来解决我的牛顿算法?

来自分类Dev

我必须循环吗?有没有更快的方法来建立虚拟变量?

来自分类Dev

有没有一种更快的方法来进行熊猫循环?

来自分类Dev

有没有更快的方法来运行SQL Where Case

Related 相关文章

  1. 1

    (速度挑战)用欧几里德距离来计算两个矩阵行之间的距离矩阵的更快方法?

  2. 2

    简单快速的方法来计算二进制整数到0的汉明距离?

  3. 3

    有没有更快的方法来 grep 模式或提高 while 循环的速度?

  4. 4

    有没有更快的方法来计算每小时挑选的 pcs 的总和

  5. 5

    计算两个整数矩阵/数据帧的所有行之间的成对汉明距离

  6. 6

    有没有更快的方法来计数XmlNodeList

  7. 7

    有效使用python计算汉明距离

  8. 8

    使用`dplyr`计算有效汉明距离

  9. 9

    有没有通用的方法来打印变量?

  10. 10

    有没有更好的方法来计算重量

  11. 11

    有没有比pow()更快的方法来在C ++中计算10的整数次幂?

  12. 12

    快速计算汉明距离

  13. 13

    有没有一种有效的方法来测量单个点到大量点中每个点的距离?

  14. 14

    有没有更快,更有效的方法来保存python字典?

  15. 15

    有没有更快的方法来对SortedList进行正则表达式?

  16. 16

    有没有比cURL更快/更好的方法来检查URL是否可访问?

  17. 17

    有没有更快的方法来检测游戏功能?

  18. 18

    有没有更快的方法来获得相同的结果?

  19. 19

    有没有一种更快的方法来检查数字是否在间隔内?

  20. 20

    有没有更快的方法来添加我的多对多DBIC关系?

  21. 21

    有没有一种更快的方法来在atom中执行拼写检查?

  22. 22

    有没有更快的方法来建立多个子目录?

  23. 23

    有没有更快的方法来达到相同的结果?

  24. 24

    有没有更快的方法来实现此循环功能?

  25. 25

    有没有更快的方法来检查列表中的列表是否等效?

  26. 26

    有没有更快的方法来解决我的牛顿算法?

  27. 27

    我必须循环吗?有没有更快的方法来建立虚拟变量?

  28. 28

    有没有一种更快的方法来进行熊猫循环?

  29. 29

    有没有更快的方法来运行SQL Where Case

热门标签

归档