首页 > 解决方案 > R中的累积多维数组和

问题描述

在 R 中,如何将矩阵不同边距上累积和的计算推广到多维数组?

例如,给定矩阵

a2 <- array(1:6, dim = c(2,3))
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

可以使用以下公式计算不同边距的累积总和apply

apply(a2, 2, cumsum)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    3    7   11
t(apply(a2, 1, cumsum))
     [,1] [,2] [,3]
[1,]    1    4    9
[2,]    2    6   12

请注意,在后一种情况下需要进行一些重塑。现在的问题是:

您将如何计算多维数组的累积和?

例如,对于像这样的三维数组:

a3 <- array(1:24, dim = c(2,3,4))

我对行、列和第三维的累积和感兴趣,保留原始数组的结构。具体来说,行累计和应该是:

, , 1

     [,1] [,2] [,3]
[1,]    1    4    9
[2,]    2    6   12

, , 2

     [,1] [,2] [,3]
[1,]    7   16   27
[2,]    8   18   30

, , 3

     [,1] [,2] [,3]
[1,]   13   28   45
[2,]   14   30   48

, , 4

     [,1] [,2] [,3]
[1,]   19   40   63
[2,]   20   42   66

n 维数组的答案是什么?

标签: arraysrapply

解决方案


一种方法是使用一个好的旧for循环

res <- a3
for (k in 1:dim(a3)[3]) res[, , k] <- t(apply(a3[, , k], 1, cumsum))
res
#, , 1
#
#     [,1] [,2] [,3]
#[1,]    1    4    9
#[2,]    2    6   12
#
#, , 2
#
#     [,1] [,2] [,3]
#[1,]    7   16   27
#[2,]    8   18   30
#
#, , 3
#
#     [,1] [,2] [,3]
#[1,]   13   28   45
#[2,]   14   30   48
#
#, , 4
#
#     [,1] [,2] [,3]
#[1,]   19   40   63
#[2,]   20   42   66

推荐阅读