如何在Julia

时间:2017-06-29 06:34:20

标签: arrays tuples julia

假设我有一个像这样的数组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))

1 个答案:

答案 0 :(得分:2)

另一种方式可能是:

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的不同形状和长度(与问题中的版本不同),它看起来有点神秘。