R:有效地从矢量构造矩阵并用某些条件填充它

时间:2014-12-09 22:24:37

标签: r

我想根据向量A构建一个矩阵k,以便A_ij到处都是k_ik_j的最小值。

目前,我可以这样做:

k <- c(3, 1, 6, 5)

mm <- outer(k, k, function(x, y) ifelse(x <= y, x, y))

但是,如果vecor很大,我编写的代码运行速度相对较慢,我怎样才能提高计算效率呢?

感谢。

1 个答案:

答案 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