R中复现MATLAB非一致维度数组逐元素广播运算的方法
问题解答
R基础运算的数组广播仅支持标量/低维结构与高维数组的运算,不支持同维度下长度为1的维度自动扩展,所以直接运算会报错。你可以用以下两种方式复现MATLAB的运算结果:
方法1:Base R原生实现(无需安装额外包)
通过手动扩展匹配两个数组的维度后直接运算:
# 定义原始数组 arr1 <- array(1:6, dim = c(3, 1, 2)) arr2 <- array(6:1, dim = c(1, 3, 2)) # 扩展维度:arr1第二维重复3次,arr2第一维重复3次 result <- arr1[, rep(1, ncol(arr2)), ] - arr2[rep(1, nrow(arr1)), , ]
验证输出:
# 第一页结果 result[,,1] #> [,1] [,2] [,3] #> [1,] -5 -4 -3 #> [2,] -4 -3 -2 #> [3,] -3 -2 -1 # 第二页结果 result[,,2] #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 3 4 #> [3,] 3 4 5
方法2:使用rray包(最接近MATLAB使用体验)
rray包原生支持和MATLAB一致的维度自动广播,无需手动调整维度:
# 首次使用先安装包 # install.packages("rray") library(rray) # 定义rray数组,直接运算即可自动广播 arr1 <- rray(1:6, dim = c(3, 1, 2)) arr2 <- rray(6:1, dim = c(1, 3, 2)) result <- arr1 - arr2
内容的提问来源于stack exchange,提问作者jblood94
相关产品推荐
相关产品推荐

