6

如果我有一个数组 A

A <- array(0, c(4, 3, 5))
for(i in 1:5) {
  set.seed(i)
  A[, , i] <- matrix(rnorm(12), 4, 3)
}

如果我有矩阵 B

set.seed(6)
B <- matrix(rnorm(12), 4, 3)

从数组 A 的每个矩阵中减去 B 的代码是:

d<-array(0, c(4,3,5))
for(i in 1:5){
  d[,,i]<-A[,,i]-B
}

但是,使用“应用”系列的函数执行相同计算的代码是什么?

4

3 回答 3

8

这是sweep为了什么。

sweep(A, 1:2, B)
于 2013-06-26T16:49:55.873 回答
6

也许不是很直观:

A[] <- apply(A, 3, `-`, B)
于 2013-06-26T16:49:30.063 回答
4

因为您在最后一个数组维度上循环,所以您可以简单地执行以下操作:

d <- A - as.vector(B)

它会快得多。这与从矩阵中减去向量时的想法相同:向量被回收,因此它被减去到每一列。

于 2013-06-26T17:16:36.320 回答