如何在julia中交错数组

时间:2014-06-06 13:25:38

标签: arrays julia

是否可以在julia中交错两个数组?

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

20-element Array{Int64,1}:
  1
  11
  2
  12
  3
  13
  4
  14
  .
  .
  .

与红宝石可以做的有点类似Merge and interleave two arrays in Ruby

4 个答案:

答案 0 :(得分:4)

你可以使用

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

获取矢量。

答案 1 :(得分:3)

想出来了!

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)[:]

答案 2 :(得分:3)

有一种直接的方法可以在不需要使用reshape()功能的情况下执行此操作。特别是,我们可以将向量绑定到矩阵中,然后在该矩阵的转置上使用[:]。例如:

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

采用矩阵[a b]的转置为我们提供了一个2乘10的矩阵,然后[:]以向量的形式返回其所有元素。 [:]对我们如此有效的原因是因为Julia使用了column-major ordering

答案 3 :(得分:1)

为了完整起见,将@ 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):

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