如何优雅实现R语言中数组各层与同维度矩阵的逐元素相加?
三维数组每层与同尺寸矩阵逐元素相加的简洁实现
需求:将三维数组的每一层,与行数、列数相同的矩阵进行逐元素相加。
示例数据
array1 <- array(1, dim = c(3, 3, 2)) matrix1 <- matrix(2, nrow = 3, ncol = 3)
运行后输出的数组和矩阵如下:
> array1 , , 1 [,1] [,2] [,3] [1,] 1 1 1 [2,] 1 1 1 [3,] 1 1 1 , , 2 [,1] [,2] [,3] [1,] 1 1 1 [2,] 1 1 1 [3,] 1 1 1 > matrix1 [,1] [,2] [,3] [1,] 2 2 2 [2,] 2 2 2 [3,] 2 2 2
期望结果
> sumofarrays , , 1 [,1] [,2] [,3] [1,] 3 3 3 [2,] 3 3 3 [3,] 3 3 3 , , 2 [,1] [,2] [,3] [1,] 3 3 3 [2,] 3 3 3 [3,] 3 3 3
现有实现与优化方案
你目前的实现代码是:
sumofarrays <- array1 + array(matrix1, dim=c(nrow(matrix1), ncol(matrix1), dim(array1)[3] ))
其实利用R的向量化运算自动广播特性,可以直接简化为一行代码:
sumofarrays <- array1 + matrix1
原理说明
R在进行数组运算时,会自动扩展维度匹配:当两个数组的对应维度要么相等,要么其中一个维度为1时,会自动将维度为1的对象复制扩展,匹配另一个对象的维度。这里matrix1的维度是(3,3),等价于(3,3,1),而array1是(3,3,2),第三维的1会自动扩展为2,实现将矩阵与数组的每一层逐元素相加的效果。
内容的提问来源于stack exchange,提问作者Elanor
相关产品推荐
相关产品推荐

