arrays - R 应用数组输出维度

标签 arrays r matrix apply

与此问题相关: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 length n, then apply returns an array of dimension c(n, dim(X)[MARGIN]) if n > 1.

在这种情况下,每次调用FUN返回长度为 4 的向量尺寸为 MARGIN=33 。注意每次调用FUN的结果在apply被强制为 vector不是matrix .

现在,与 newa[] <- array(... ,您将替换 newa 中的值对象的值来自 array计算。 newa 的属性没有改变,所以它的尺寸仍然是 2 2 3 .

希望这有帮助。

关于arrays - R 应用数组输出维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39895024/

相关文章:

C 编程和数组、矩阵操作

arrays - 英特尔 Fortran 95 编译器是否允许模块数组的大小不固定?

c - 如何使用 int ** 而不是 int [][] 二维数组

r - ggplot 中使用facet_grid 进行绘图的方法

r - R 中具有类别和子类别的多重熔化

c++ - 这个按升序打印按行和按列排序的矩阵的程序的零在哪里?

arrays - 在for循环中将多个对象添加到swift数组

arrays - 使用数组创建对象的对角线使用 for in 循环

r - 通过 y=0 创建一条直线模糊的点/虚线

在彩色区域中绘制轮廓的算法