-->

使用应用多维数组(Use apply on a multi-dimension array)

2019-09-29 06:28发布

一个正常的矩阵将是2维矩阵。 但是,我可以初始化:

a<-array(0,dim=c(2,3,4,5))

这是一个2 * 4 * 5 * 3矩阵或数组。

命令

apply(a,c(2,3),sum)

将给出一个4 * 5阵列,包含超过在第一和第四维中的元素的总和。

为什么呢? 据我所知,在apply功能,1表示行,2表示列,但到底是什么意思3在这里?

我们在这里需要一些抽象。

Answer 1:

最容易理解的方式apply的阵列上是尝试一些例子。 下面是最后一个例子对象修改了一些数据的文件中 :

> z <- array(1:24, dim = 2:4)
> dim(z)
[1] 2 3 4

> apply(z, 1, function(x) sum(x))
[1] 144 156
> apply(z, 2, function(x) sum(x))
[1]  84 100 116
> apply(z, 3, function(x) sum(x))
[1]  21  57  93 129

这里发生了什么? 好了,我们创建了一个三维数组z 。 如果您使用的applyMARGIN=1你行总和(两个值,因为有两行),如果使用MARGIN=2你列总和(三个值,因为有三列),如果你使用MARGIN=3你获得跨阵列的第三维款项(四个值,因为有四个层次的数组的第三维)。

如果指定了一个矢量MARGIN ,像c(2,3)你得到的行,每一列和第三维水平的总和。 注意如何在上述例子中,从结果applyMARGIN=1是行总和,并与MARGIN=2个总和,分别在下面的结果看到的矩阵的:

> apply(z, c(2,3), function(x) sum(x))
     [,1] [,2] [,3] [,4]
[1,]    3   15   27   39
[2,]    7   19   31   43
[3,]   11   23   35   47

如果您指定的所有尺寸的MARGIN=c(1,2,3)你只需获得原始三维物体:

> all.equal(z, apply(z, c(1,2,3), function(x) sum(x)))
[1] TRUE

最好能在这里学到的办法就是开始玩弄一些真正的矩阵。 你的榜样数据并不在资金寻找,因为所有的数组项都是零很有帮助。



文章来源: Use apply on a multi-dimension array