R 应用数组输出维度
R Apply Array Output Dimension
与此问题相关:
如果我创建以下数组和矩阵:
a <- array(1, dim=c(2,2,3))
b <- matrix(c(1,1,1,1), nrow=2)
并且想对 b
的每个元素进行乘法运算,每个切片 a
沿第 3 维移动,我会使用 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 length n
, then apply
returns an array of dimension c(n, dim(X)[MARGIN])
if n > 1
.
在这种情况下,每次调用 FUN
returns 一个长度为 4
的向量,MARGIN=3
的维度为 3
。请注意,apply
中 FUN
的每次调用的结果都被强制转换为 vector
而不是 matrix
.
现在,使用 newa[] <- array(...
,您将 newa
对象中的值替换为来自 array
计算的值。 newa
的属性没有改变,所以它的维度仍然是 2 2 3
.
希望这对您有所帮助。
与此问题相关:
如果我创建以下数组和矩阵:
a <- array(1, dim=c(2,2,3))
b <- matrix(c(1,1,1,1), nrow=2)
并且想对 b
的每个元素进行乘法运算,每个切片 a
沿第 3 维移动,我会使用 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
returns 一个长度为 4
的向量,MARGIN=3
的维度为 3
。请注意,apply
中 FUN
的每次调用的结果都被强制转换为 vector
而不是 matrix
.
现在,使用 newa[] <- array(...
,您将 newa
对象中的值替换为来自 array
计算的值。 newa
的属性没有改变,所以它的维度仍然是 2 2 3
.
希望这对您有所帮助。