如何将包含朱莉娅阵列的各个元组串联



假设我有一个数组x这样:

x = [(i*ones(4,4,3),rand(11),rand(1:10)) for i=1:5];

现在,我想从最后一个维度加入它们。我的意思是,在操作结束时,我想拥有3个数组。第一个数组的大小需要是 (4,4,3,5) [5个(4,4,3(阵列的串联(,第二个数组(11,5(,最后一个是(1,5(大小。它在朱莉娅吗?

编辑当然,我可以像下面一样做,但是我想听听是否有一种聪明的方法(就记忆消耗和速度性能而言(:

julia> i=[ t[1] for t in x];
julia> q=[ t[2] for t in x];
julia> l=[ t[3] for t in x];
julia> (cat(4,i...),cat(2,q...),reshape(l,1,length(l))

另一种方法可能是:

ntuple(s->reshape(
  [x[i][s][j] for j in eachindex(first(x)[s]), i=1:length(x)],
  size(first(x)[s])..., length(x)
), length(first(x)))

节省了一些时间&内存(取决于x中的尺寸/形状(,但是问题中的较长解决方案应该可以。顺便说一句,因为此版本适用于x的不同形状和长度(与问题中的版本不同(,它看起来更加隐秘。

最新更新