Julia数组推导式丢失内部维度问题及维度修正需求
Julia数组推导式维度问题解析
为什么维度会"消失"?
你用数组推导式[myarr for i in 1:2]创建的是一维数组,数组里的每个元素都是独立的4×3矩阵。这种结构属于"数组嵌套数组",外层数组只记录自身的元素数量(也就是2个),不会自动把内部数组的维度合并成一个高维数组,所以size(broken_off_dim)返回(2,)。
如何得到(2,4,3)的高维数组?
这里提供几种直接有效的解决方法:
方法1:用cat函数指定维度拼接
cat可以把多个数组按指定维度拼接成高维数组,直接得到你需要的形状:
myarr = Array{Float64}(undef,4,3) fixed_arr = cat([myarr for i in 1:2]..., dims=1) size(fixed_arr) # 返回(2,4,3)
如果需要调整维度顺序,比如想得到(4,3,2),只需要把dims参数改成3即可。
方法2:用stack函数(Julia 1.9及以上版本支持)
stack是更直观的合并工具,专门用来把嵌套数组转成高维数组:
fixed_arr = stack([myarr for i in 1:2]; dims=1) size(fixed_arr) # 返回(2,4,3)
方法3:直接初始化高维数组
如果不需要先创建单个矩阵,也可以一步到位初始化目标形状的数组:
fixed_arr = Array{Float64}(undef, 2,4,3) # 若需要把myarr的内容复制到每个位置,可用广播赋值 fixed_arr .= myarr # 广播会自动匹配维度,填充到2×4×3的对应位置
为什么reshape会报错?
reshape要求原数组的总元素数和目标形状的总元素数一致,但你原来的嵌套数组展平后只有2个元素(每个元素是一个矩阵),总元素数为2,而(2,4,3)的总元素数是24,两者不匹配,因此会报错。必须先把嵌套数组转成连续的高维数组,再进行reshape操作。
内容的提问来源于stack exchange,提问作者KeynesCoeFen
相关产品推荐
相关产品推荐

