【发布时间】:2021-07-03 06:21:51
【问题描述】:
我没有为 R 包中的两个数据集找到合适的布雷距离(Bray-Curtis 指数)函数。所以我创建了一个,但它非常耗时。有没有更快的方法来做到这一点?
bray_dist <- function(a, b) {
a_len = dim(a)[1]
b_len = dim(b)[1]
distmatrix = matrix(data=NA, nrow=a_len, ncol=b_len)
for(i in seq(1,a_len)) {
for(j in seq(1,b_len)) {
distmatrix[i,j] = 2*sum(pmin(a[i,], b[j,]))/(sum(a[i,]) + sum(b[j,]))
}
}
return(distmatrix)
}
这里是数据的例子,我的真实数据比这个大,而且因为我重复了很多次所以需要很长时间
a <- matrix( round(rnorm(400, 4)), ncol=5)
b <- matrix( round(rnorm(500, 5)), ncol=5)
如果我使用 bray_dist 函数,则需要 9.700986 秒
tstart<-Sys.time()
for (i in 1:100){
c<-bray_dist(a,b)
}
Sys.time()-tstart
如果使用下面 Mohanasundaram 所示的 b_dist,则需要 8.709085 秒,比上一个要好,但仍然没有那么好。
tstart<-Sys.time()
for (i in 1:100){
c<-b_dist(a,b)
}
Sys.time()-tstart
【问题讨论】:
-
能否提供
a,b的示例数据? -
这样的库是否像你想要的那样做:rdrr.io/cran/ecodist/man/bcdist.html
标签: r distance similarity