You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 16:13:34