与此问题相关: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
为什么这两件事给出不同的答案?
最佳答案
所得尺寸为 apply(a, 3,
* , b)
是 4 3
因为根据文档,请参阅 ?apply
:
If each call to
FUN
returns a vector of lengthn
, thenapply
returns an array of dimensionc(n, dim(X)[MARGIN])
ifn > 1
.
在这种情况下,每次调用FUN
返回长度为 4
的向量尺寸为 MARGIN=3
是 3
。注意每次调用FUN
的结果在apply
被强制为 vector
不是matrix
.
现在,与 newa[] <- array(...
,您将替换 newa
中的值对象的值来自 array
计算。 newa
的属性没有改变,所以它的尺寸仍然是 2 2 3
.
希望这有帮助。
关于arrays - R 应用数组输出维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39895024/