如何在R中基于多个二维(2D)矩阵创建三维(3D)数组?
R中合并多个同尺寸2D矩阵为指定维度3D数组的实现方法
前置说明
你提供的示例代码存在可运行性问题:matrix(1:1, nrow = 5, ncol = 5)仅包含1个元素,无法填充25个位置生成5x5矩阵,可先修正为可运行的基础示例:
# 修正后的5x5矩阵生成代码 matrix1 <- matrix(1, nrow = 5, ncol = 5) matrix2 <- matrix(2, nrow = 5, ncol = 5) matrix3 <- matrix(3, nrow = 5, ncol = 5)
目标是生成维度为c(3, 5, 5)(即维度顺序为「矩阵序号-行-列」)的3D数组,可通过以下两种常用方法实现:
方法1:基础包实现(无需安装额外依赖)
通过临时数组+维度转置的方式完成,适配R默认的列优先存储规则:
# 1. 合并3个矩阵的元素,先生成维度为[c(5,5,3)]的临时数组(第三维对应原矩阵序号) temp_arr <- array(c(matrix1, matrix2, matrix3), dim = c(5, 5, 3)) # 2. 转置维度顺序,将第三维(矩阵序号)调整为第一维,得到目标维度[c(3,5,5)] target_arr <- aperm(temp_arr, perm = c(3, 1, 2)) # 验证维度是否符合要求 dim(target_arr) # 输出应为:[1] 3 5 5
方法2:abind扩展包实现(更直观)
abind是专门用于多维数组拼接的工具包,适合频繁处理高维数组的场景:
# 首次使用需先安装包 install.packages("abind") library(abind) # 1. 将每个2D矩阵升维为1x5x5的3D数组,对应第一维的1层 mat1_arr <- array(matrix1, dim = c(1, 5, 5)) mat2_arr <- array(matrix2, dim = c(1, 5, 5)) mat3_arr <- array(matrix3, dim = c(1, 5, 5)) # 2. 沿第一维拼接三个数组,直接得到目标维度的结果 target_arr <- abind(mat1_arr, mat2_arr, mat3_arr, along = 1) # 验证维度 dim(target_arr) # 输出应为:[1] 3 5 5
结果正确性验证
拼接完成后可通过对比切片和原矩阵,确认没有顺序错位:
# 第一维第1层切片应等于matrix1 all.equal(target_arr[1,,], matrix1) # 第一维第2层切片应等于matrix2 all.equal(target_arr[2,,], matrix2) # 第一维第3层切片应等于matrix3 all.equal(target_arr[3,,], matrix3) # 以上三个表达式均输出`TRUE`即代表拼接正确
注意事项
- R的数组默认采用*列优先(column-major)*存储规则,不要直接将合并后的元素指定为
dim = c(3,5,5)生成数组,否则会出现元素顺序错乱。
内容的提问来源于stack exchange,提问作者R7S
相关产品推荐
相关产品推荐

