我想将两个不同维度的数组相乘(或除)(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
}
但我想避免使用循环。
答案 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