Arrays 如何在julia中交错数组

Arrays 如何在julia中交错数组,arrays,julia,Arrays,Julia,可以在julia中交错两个数组吗 例如,如果a=[1:10]和b=[11:20]我希望能够返回 20-element Array{Int64,1}: 1 11 2 12 3 13 4 14 . . . 有点像ruby所能做的明白了 reshape([a b]',20,1) 更一般的是: reshape([a b].',size(a,1)+size(b,1),1) 我们可以使用hack来获取向量,而不是1D数组: reshape([a b].',s

可以在julia中交错两个数组吗

例如,如果
a=[1:10]
b=[11:20]
我希望能够返回

20-element Array{Int64,1}:
  1
  11
  2
  12
  3
  13
  4
  14
  .
  .
  .
有点像ruby所能做的

明白了

reshape([a b]',20,1)
更一般的是:

reshape([a b].',size(a,1)+size(b,1),1)
我们可以使用hack来获取向量,而不是1D数组:

reshape([a b].',size(a,1)+size(b,1),1)[:]
你可以用

reshape([a b].', length(a)+length(b))

获取向量。

有一种简单的方法,无需使用
重塑()。特别是,我们可以将向量绑定到一个矩阵中,然后对该矩阵的转置使用
[:]
。例如:

    julia> a = 1:10
    julia> b = 11:20
    julia> [a b]'[:]
    20-element Array{Int64,1}:
     1
    11
     2
    12
     3
    13
     .
     .
     .
    20

对矩阵进行转置,得到一个2乘10的矩阵,然后以向量的形式返回它的所有元素。之所以
[:]
对我们如此有效,是因为Julia使用了

为了完整性,将@bdeonovic的解决方案扩展到二维数组

julia>  a
2×2 Array{Int64,2}:
 1  2
 3  4

julia> b
2×2 Array{Int64,2}:
 6  7
 8  9

交织行:

julia> reshape([a[:] b[:]]', 4, 2)
4×2 Array{Int64,2}:
 1  2
 6  7
 3  4
 8  9
交织柱:

julia> reshape( [a' b']', 2, 4 )
2×4 Array{Int64,2}:
 1  6  2  7
 3  8  4  9
交织阵列(堆叠/vcatting):


这种差异对于您的用例可能并不重要,但它们将生成
20x1数组{Int64,2}
对象,而不是
10元素数组{Int64,1}
对象。啊,是的,谢谢您指出这一点。我用这里指定的黑客编辑了答案,谢谢。我想当你显式地使用整形时,这种方法更有用。对于元组数组,这种方法失败了,但是你可以使用
permutedims(tuples\u 2D)[:]
而不是
tuples\u 2D'[:]
julia> reshape([a' b']', 4, 2)
4×2 Array{Int64,2}:
 1  2
 3  4
 6  7
 8  9