R:成对矩阵的向量化循环
我希望在R中对一个循环进行矢量化,该循环计算与建议顺序相关的成对矩阵的元素 举例来说,问题更容易理解: 给出了一个矩阵示例R:成对矩阵的向量化循环,r,performance,matrix,vectorization,R,Performance,Matrix,Vectorization,我希望在R中对一个循环进行矢量化,该循环计算与建议顺序相关的成对矩阵的元素 举例来说,问题更容易理解: 给出了一个矩阵示例 m <- matrix(c(0,2,1,0,0,2,2,1,0), nrow = 3) row.names(m) <- colnames(m) <- c("apple", "orange", "pear") 这是一个带有outer sum(m * outer(p.order, p.order,
m <- matrix(c(0,2,1,0,0,2,2,1,0), nrow = 3)
row.names(m) <- colnames(m) <- c("apple", "orange", "pear")
这是一个带有
outer
sum(m * outer(p.order, p.order, FUN = `<`))
#[1] 5
sum(m*outer)(p.order,p.order,FUN=`谢谢你,这和requested@jayb在使用outer
后,您是否可以用更改的基准或时间更新您的帖子。谢谢
new.m <- array(dim = c(nrow(m), nrow(m)))
for(p in 1:nrow(m)){
for(q in 1:nrow(m)){
new.m[p,q] <- 0 + (p.order[p] < p.order[q])
}
}
sum(m * new.m)
loop.function <- function(p.order, mat){
nt <- nrow(mat)
new.m <- array(dim=c(nt,nt))
for(p in 1:nt){ for(q in 1:nt){ new.m[p,q] <- 0 + (p.order[p] < p.order[q])}}
return(sum(mat * new.m))
}
vec.function <- function(p.order, mat){
return(sum(mat * outer(p.order, p.order, FUN = `<`)))
}
Unit: microseconds
expr min lq mean median uq max neval
loop.function(p.order, m) 14.4 14.7 93.049 14.9 15.15 7805.5 100
vec.function(p.order, m) 7.6 8.1 33.850 8.3 8.60 2474.9 100
cld
a
a
sum(m * outer(p.order, p.order, FUN = `<`))
#[1] 5