Arrays 从n,k维矩阵数组中减去n,k维矩阵

Arrays 从n,k维矩阵数组中减去n,k维矩阵,arrays,r,matrix,apply,Arrays,R,Matrix,Apply,如果我有一个数组A A <- array(0, c(4, 3, 5)) for(i in 1:5) { set.seed(i) A[, , i] <- matrix(rnorm(12), 4, 3) } A可能不是很直观: A[] <- apply(A, 3, `-`, B) A[]这就是sweep的用途 sweep(A, 1:2, B) 因为您在最后一个数组维度上循环,所以只需执行以下操作: d <- A - as.vector(B) d Tnx获得有价

如果我有一个数组A

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

A可能不是很直观:

A[] <- apply(A, 3, `-`, B)

A[]这就是
sweep
的用途

sweep(A, 1:2, B)

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

d <- A - as.vector(B)

d Tnx获得有价值的回复。请告诉我,在保持A[]的同时,我们实际上对R说了些什么?这意味着将A
的元素赋值到括号内。您可能还记得,编制索引时,缺少的维度表示“选择该维度中的所有元素”,例如
mat[1,]
表示“选择矩阵
mat
的第一行和所有列”。在进行一维索引时,此约定也适用,因此
[]
表示“选择所有元素”。它在这里所做的是,在保持其维度不变的情况下,将其赋值到
A
。这在这里是必要的,因为
apply
本身将返回一个二维结构,而我们需要一个三维结果。也许我引入了一些误解,因为在第一篇文章中我写了set.seed(5),只给出了数组最后一维的数值差。然而,我编辑了这篇文章(例如set.seed(I)),可能会让我的意图更加直观和清晰。不过,非常感谢您的回复@菜鸟:我想你没有意识到我的答案和你的答案是一样的。你是对的!我得到了不同的结果,因为我用错误的矩阵B检查了你的建议…我的错。TnxYet另一个强大的命令,其名称完全不直观(对非统计学家而言)。。。我爱你!名称与“应用”不同。
sweep(A, 1:2, B)
d <- A - as.vector(B)