【问题标题】:How to interleave arrays in julia如何在 Julia 中交错数组
【发布时间】:2014-06-06 13:25:37
【问题描述】:

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

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

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

有点类似于 ruby​​ 可以做的事情Merge and interleave two arrays in Ruby

【问题讨论】:

    标签: arrays julia


    【解决方案1】:

    有一种直接的方法可以做到这一点,而无需使用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

    【讨论】:

    • 对于元组数组,这会失败,但您可以使用permutedims(tuples_2D)[:] 而不是tuples_2D'[:]
    【解决方案2】:

    想通了!

    reshape([a b]',20,1)
    

    还有更一般的:

    reshape([a b].',size(a,1)+size(b,1),1)
    

    我们可以使用 hack 来获取向量而不是一维数组:

    reshape([a b].',size(a,1)+size(b,1),1)[:]
    

    【讨论】:

    • 差异对于您的用例可能并不重要,但这些差异会产生 20x1 Array{Int64,2} 对象,而不是 10-element Array{Int64,1} 对象。
    • 是的,感谢您指出这一点。我使用此处指定的 hack stackoverflow.com/questions/23957734/… 编辑了答案
    【解决方案3】:

    你可以使用

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

    得到一个向量。

    【讨论】:

    • 谢谢,注意到了。我想当您明确使用 reshape 时,hack 会更有用。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      相关资源
      最近更新 更多