如何对R语言数组中的所有矩阵同时单独计算rowSums行和
R 三维数组按切片分别计算行和的高效方案
最优方案:直接使用rowSums的dims参数
R内置的rowSums支持多维度数组的定向求和,通过指定dims参数可以直接实现需求,全程向量化运算,处理大型数组的速度远快于循环或apply类函数。
假设你的三维数组array1维度为c(行数, 列数, 切片数)(第三个维度对应你提到的每个独立矩阵),直接执行以下代码即可:
result <- rowSums(array1, dims = 1)
- 结果
result是行数与原数组行一致、列数等于原数组切片数的矩阵,第i列就是rowSums(array1[,,i])的结果,完全匹配需求。 - 参数解释:
dims = 1表示将第1维(行)作为独立维度,对dims+1及之后的维度(这里为第2维/列)求和,自动按第3维(切片)分组计算。
备选方案:使用apply定向聚合
如果后续需要扩展更复杂的聚合逻辑,可以用apply指定保留的维度进行计算:
result <- apply(array1, MARGIN = c(1,3), FUN = sum)
MARGIN = c(1,3)表示保留原数组的第1维(行)和第3维(切片),对剩余的第2维(列)求和,输出结果和rowSums方案完全一致,但处理超大型数组时速度略低于前者。
可选补充:输出保持三维数组格式
如果需要输出结果保持三维数组结构(每个行和结果对应一个1列的矩阵),可以在计算完成后调整维度:
# 调整为三维数组:c(原行数, 1, 原切片数) dim(result) <- c(nrow(array1), 1, dim(array1)[3])
内容的提问来源于stack exchange,提问作者Stoer
相关产品推荐
相关产品推荐

