是否可以在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
答案 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