arrays - 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 维数组的答案是什么?
解决方案
一种方法是使用一个好的旧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
推荐阅读
- javascript - 如何增加向上滚动的计数
- java - 在 PreferenceManager.setDefaultValues() 上获取 ClassCastException
- ajax - 使用 AJAX 时的神秘 401 挑战
- java - Eclipse 无法启动 chrome 驱动
- php - Yii2 编辑时活动表单图像上传验证问题
- javascript - Fire-base 更新后从网站表中删除旧数据
- java - 在 JAVA 中从 SOAP 响应中捕获附件
- html -
标签以不同的高度呈现 - azure - 如何在 Azure 上安装元数据库 docker 映像
- java - 按键的特定值过滤对象的数组列表