与此问题相关:Multiply multidimensional array with same-sized matrix
如果我创建以下数组和矩阵:
a <- array(1, dim=c(2,2,3))
b <- matrix(c(1,1,1,1), nrow=2)
并且想要将b
的元素乘法与每个a
切片沿着第三维移动,我会使用apply
。但是,我得到以下奇怪的结果:
> dim(apply(a, 3, `*`, b))
[1] 4 3
> newa <- array(0, dim=c(2,2,3))
> newa[] <- apply(a, 3, `*`, b)
> dim(newa)
[1] 2 2 3
为什么这两件事会给出不同的答案?
答案 0 :(得分:0)
apply(a, 3,
* , b)
的结果维度为4 3
,因为根据文档,请参阅?apply
:
如果对
FUN
的每次调用都返回长度为n
的向量,那么apply
会c(n, dim(X)[MARGIN])
返回维n > 1
的数组。
在这种情况下,每次调用FUN
都会返回一个长度为4
的向量,而带有MARGIN=3
的维度为3
。请注意,FUN
中每个apply
来电的结果都会被强制转换为vector
而不是matrix
。
现在,使用newa[] <- array(...
,您将使用newa
计算中的值替换array
对象中的值。 newa
的属性未更改,因此其维度仍为2 2 3
。
希望这有帮助。