乘以不同维度的数组

时间:2015-11-20 08:29:11

标签: r

我想将两个不同维度的数组相乘(或除)(a1 = [48,38,31]和b1 [48,38])。到目前为止,我在第三维上使用for循环。但是,我想知道如何使用(如果可能的话)apply。我们假设我有以下样本:

a1<- array(rnorm(20), dim=c(2,3,3))
b1<- array(rnorm(20), dim=c(2,3))

如果我尝试直接执行a1 / b1(或*),我就不能这样做,因为它们需要具有相同的尺寸。所以我使用了for循环:

for(i in 1:3){
  m1[,,i] <- a1[,,i]/b1
}

但我想避免使用循环。

2 个答案:

答案 0 :(得分:2)

一个选项是

test.php#.jpg

或者我们可以使用array(c(a1)/rep(b1, dim(a1)[3]), dim= dim(a1))

apply

答案 1 :(得分:1)

或者,您可以使用旨在执行此类操作的sweep函数。

 a1<- array(rnorm(20), dim=c(2,3,3))
 b1<- array(rnorm(20), dim=c(2,3))

 m1 <- array(0, dim=c(2,3,3))

 # original solution
 for(i in 1:3){
    m1[,,i] <- a1[,,i]/b1
 }

 # apply sweep   
 # to avoid the warning info add 'check.margin=F'
 m2 <- sweep(a1, 1, b1, "/", check.margin=F)

 all.equal(m1, m2)
 #[1] TRUE