如何合并不同维度的数组?abind函数失效问题求助
解决方法:统一数组维度后再合并
你遇到的问题核心是二维数组和三维数组无法直接用abind合并——你的df是2×2的二维数组,而b是1×2×2的三维数组,两者的维度数量不匹配,abind不知道该如何对齐它们的结构。
要实现你的目标(得到类似b的三维数组),我们需要先把df转换成三维数组,让它的维度结构和b在要合并的维度之外保持一致,再进行合并。下面分两种常见场景给出解决方案:
场景1:合并后得到3×2×2的三维数组
如果你想把df的2行和b的1行合并,最终生成一个3行、2列、2层的三维数组,可以按以下步骤操作:
- 把
df扩展为三维数组,让它的第三维长度和b一致(都是2)——我们可以复制df的内容来填充第三维; - 使用
abind沿第一个维度(行)合并两个三维数组。
代码示例:
library(abind) # 你的原始数据 df = array(c(50,70,45,85), dim = c(2,2)) b = array(c(50,70,45,85), dim = c(1,2,2)) # 将df转换为三维数组,第三维长度为2 df_3d = array(rep(df, 2), dim = c(2,2,2)) # 沿行维度合并 result = abind(df_3d, b, along = 1) # 查看结果维度 dim(result) # 输出: [1] 3 2 2
场景2:合并后得到2×2×2的三维数组
如果你其实是想把df作为一个独立的“层”,和b的两个层合并,需要先调整b的维度,让它和df的行/列结构匹配,再沿第三维合并:
library(abind) # 你的原始数据 df = array(c(50,70,45,85), dim = c(2,2)) b = array(c(50,70,45,85), dim = c(1,2,2)) # 将df转换为三维数组(单一层) df_3d = array(df, dim = c(2,2,1)) # 调整b的维度,让它变成2×2×1的单一层数组 b_adjusted = array(t(b), dim = c(2,2,1)) # 沿第三维合并 result = abind(df_3d, b_adjusted, along = 3) # 查看结果维度 dim(result) # 输出: [1] 2 2 2
补充说明
如果你的b维度是不小心写错的(比如本来想定义成2×2×1的三维数组),那可以直接把b的维度修正为c(2,2,1),再将df转为三维数组后合并,这样会更简单:
b = array(c(50,70,45,85), dim = c(2,2,1)) df_3d = array(df, dim = c(2,2,1)) result = abind(df_3d, b, along = 3)
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

