【发布时间】: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
【问题讨论】:
是否可以在 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
【问题讨论】:
有一种直接的方法可以做到这一点,而无需使用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'[:]
想通了!
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} 对象。
你可以使用
reshape([a b].', length(a)+length(b))
得到一个向量。
【讨论】:
为了完整起见,将@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
【讨论】: