arrays - 在多维数组上使用 apply

标签 arrays r matrix apply sapply

普通矩阵是二维矩阵。但是,我可以初始化:

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是什么意思呢?

这里我们需要一些抽象。

最佳答案

了解数组上的应用 的最简单方法是尝试一些示例。这是从最后一个示例对象 in the documentation 修改而来的一些数据:

> 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

在这里学习的最佳方法就是开始尝试一些真实的矩阵。您的示例数据对于查看总和没有帮助,因为所有数组条目均为零。

关于arrays - 在多维数组上使用 apply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23302072/

相关文章:

php - 引用 - 这个错误在 PHP 中意味着什么?

重新排列和排序

r - 使用 1 列数据填充 R 矩阵

r - 所选索引上每行的平均值

php - PHP 上余数分布的百分比限制

c++ - 为什么我的输出为零?

C++ 存储输入行

r - 更新 R Shiny 中动态创建的 selectInput 框的选择

python - plotnine 直接颜色分配

r - 有关丢失数据的问题