如何在Julia中连接包含数组的元组数组

4
假设我有一个数组x,内容如下:
x = [(i*ones(4,4,3),rand(11),rand(1:10)) for i=1:5];

现在,我想从最后一个维度将它们连接起来。也就是说,在操作结束时,我想要有3个数组。第一个数组的大小需要是(4,4,3,5)(由5个ones(4,4,3)数组连接而成),第二个数组的大小是(11,5),最后一个数组的大小是(1,5)。我该如何在Julia中实现? 编辑 当然,我可以像下面这样做,但我想听听是否有更聪明的方法(从内存消耗和速度性能方面考虑):
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个回答

3

另一种方式可能是:

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(不像问题中的版本),所以它看起来有点神秘。


谢谢您的建议,我会等一段时间再接受您的答案,以便看看其他的选择。 - zwlayer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接