动态维数组乘法

时间:2016-07-22 09:51:51

标签: r

我处于这种情况,我需要将数组乘以没有已知的数组编号和数组维度。例如:

demo1 = c(0.45, 0.55)
demo2 = c(0.1, 0.1, 0.15, 0.15, 0.2, 0.05, 0.15, 0.1)

myarr <- array(1:n, dim = c(length(demo1), length(demo2)))

for (p in 1:length(demo1)){
    for (q in 1:length(demo2)){
        myarr[p,q] <- demo1[p]*demo2[q]
    }
}

当我们知道演示数量时,没关系。但我不知道什么时候我不知道演示的数量,仍然需要制作一个长度乘法维数的数组。所以,我可能有demo = 3或4或5的数量,依此类推。如何概括上面for循环中的语句。由于我是R的新手,我将非常感谢您对此的快速帮助。非常感谢提前

1 个答案:

答案 0 :(得分:0)

查看?outer或缩写%o%以将您的向量相乘:

myarr <- demo1 %o% demo2 %o% demo3 # %o%...

当然,在添加新矢量的情况下,您可以迭代地执行此操作:

myarr <- demo1 %o% demo2
myarr <- myarr %o% demo3 
#...

作为附加信息:For - R中的循环非常慢,如果可以使用 vectorization ,则不应该使用它。

使用矢量化代替循环可以获得大约1000的时间优势:

demo1 <- runif(1000)
demo2 <- runif(1000)
system.time({
  myarr <- array(1:n, dim = c(length(demo1), length(demo2)))

  for (p in 1:length(demo1)){
    for (q in 1:length(demo2)){
        myarr[p,q] <- demo1[p]*demo2[q]
    }
  }
})
#round about 6.8s on my system
system.time(demo1 %o% demo2)
#round about 0.01s on my system