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

bur*_*030 3 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
Run Code Online (Sandbox Code Playgroud)

有可能以某种方式使用循环而不是使用任何应用函数吗?

提前致谢!

A5C*_*2T1 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
Run Code Online (Sandbox Code Playgroud)


fot*_*ton 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,])
  }
}
Run Code Online (Sandbox Code Playgroud)

给你

> 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
Run Code Online (Sandbox Code Playgroud)

编辑:既然你问了(但我建议不要使用这个解决方案,因为它很慢,而且肯定不是在 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]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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