【发布时间】:2013-09-22 05:48:10
【问题描述】:
我有两个矩阵 A 和 B。两者都包含一个名称列表。问题基于相似性度量。我找到 A 的元素与 B(整个矩阵)的最小距离。如果汉明距离更大大于 3 ,则将数据添加到矩阵 B 中,否则不添加。那我给你举个例子吧
A<-c("cvombiflam","combiflam")
A<-as.matrix(A)
B<-c("windfall","computer","baseball")
B<-as.matrix(B)
现在 A1 将搜索 B 并找到 B 中关于汉明距离最近的成员。最近的是 B2。它将找到与 B[2] 的距离。由于最近距离大于 3,因此将 cvomiflam 添加到 B。现在 B 将是
B<-c("windfall",
"computer",
"baseball",
"cvombiflam")
现在 A("combiflam") 的第二个元素将搜索 B。最接近的是 B 的第四个元素 (cvombiflam ),距离为 1。因此 combiflam 不会添加到 B 中。我希望更新最终的 B 列表
我写的代码是:
for(i in 1:length(A))
{
d<-min(stringdistmatrix(A[i],B)
if(d>3)
{
B<-rbind(B,A[i])
}
}
现在我有大约 140,000 的矩阵和 200,000 的 B。代码运行良好,但运行需要很长时间。请告诉我一个更快的方法来做到这一点。
【问题讨论】:
-
你不小心重复了这个吗?这是另一个:stackoverflow.com/questions/18940635/…
-
是的,但我刚刚标记了另一个帖子以将其删除
-
strindist可以利用多个内核(如果可用)。 -
嗨,Ricardo,请您澄清一下
-
请务必提及任何使用过的软件包,这里是
stringdist。此外,您提到了汉明距离,但似乎stringdistmatrix函数中使用的默认距离是osa:Optimal string aligment, (restricted Damerau-Levenshtein distance).
标签: r performance for-loop matrix distance