我想根据向量A
构建一个矩阵k
,以便A_ij
到处都是k_i
和k_j
的最小值。
目前,我可以这样做:
k <- c(3, 1, 6, 5)
mm <- outer(k, k, function(x, y) ifelse(x <= y, x, y))
但是,如果vecor很大,我编写的代码运行速度相对较慢,我怎样才能提高计算效率呢?
感谢。
答案 0 :(得分:4)
这似乎加快了一个数量级:
outer(k,k,pmin)
# or if you are only dealing with integers and speed reeaaaly matters:
outer(k,k,pmin.int)
identical(outer(k,k,pmin), outer(k, k, function(x, y) ifelse(x <= y, x, y)) )
#[1] TRUE
k <- 1:5000
system.time(outer(k, k, function(x, y) ifelse(x <= y, x, y)))
# user system elapsed
# 6.21 0.52 6.73
system.time(outer(k,k,pmin))
# user system elapsed
# 0.51 0.03 0.54
system.time(outer(k,k,pmin.int))
# user system elapsed
# 0.48 0.03 0.51