如何将每个维度中的数组值合并为一个矩阵

时间:2014-01-23 07:34:38

标签: r matrix

我有一个三维数组,想要总结每个维度的值,最后得到一个数据矩阵。

以下是一个例子:

array1 <- array(c(-5.5,6,3),dim = c(3,4,3))  

matrix <- matrix(NA, nrow=3, ncol=4)

matrix
       [,1]   [,2]  [,3]   [,4]
[1,]  -16.5  -16.5 -16.5  -16.5
[2,]   18      18    18     18
[3,]    9       9     9      9

是否可以通过循环而不是使用任何应用函数来实现?

提前致谢!

2 个答案:

答案 0 :(得分:9)

您的问题表明您不想使用apply功能,但如果您改变主意,请将保证金指定为c(1, 2)

apply(array1, MARGIN=c(1, 2), sum)
#       [,1]  [,2]  [,3]  [,4]
# [1,] -16.5 -16.5 -16.5 -16.5
# [2,]  18.0  18.0  18.0  18.0
# [3,]   9.0   9.0   9.0   9.0

答案 1 :(得分:2)

您确定要在每个维度上求和吗?您的示例显示了沿第三维的总和。

无论如何,这是如何做到的(你明确表示你不想使用apply):

X <- array(c(-5.5,6,3), dim = c(3,4,3))

rows <- dim(X)[1]
cols <- dim(X)[2]

result <- matrix(0, nrow=rows, ncol=cols)
for (i in seq(rows)) {
  for (j in seq(cols)) {
    result[i,j] <- sum(X[i,j,])
  }
}

给你

> result

      [,1]  [,2]  [,3]  [,4]
[1,] -16.5 -16.5 -16.5 -16.5
[2,]  18.0  18.0  18.0  18.0
[3,]   9.0   9.0   9.0   9.0

编辑:既然你问过(但我会反对这个解决方案,因为它很慢,当然不是在R中做所有这些的惯用方法):

result <- matrix(0, nrow=rows, ncol=cols)
for (i in seq(rows)) {
  for (j in seq(cols)) {
    for (k in seq(dim(X)[3])) {
      result[i,j] <- result[i,j] + X[i,j,k]
    }
  }
}

请注意,result已使用零初始化。如果不是这种情况,则必须在jk循环之间对其进行初始化。