やり方がよくわからなくなるので自分用メモを兼ねて。JuliaのVersion は1.1.0 (2019–01–21)。
2次元
julia> x = [1 2; 3 4]
2×2 Array{Int64,2}:
1 2
3 4
縦方向に拾っていきたいときは簡単で、 vec
julia> vec(x)
4-element Array{Int64,1}:
1
3
2
4
横方向に拾いたい場合は permutedims
を噛ませる。
julia> vec(permutedims(x))
4-element Array{Int64,1}:
1
2
3
4
transpose
と collect
を使う
julia> vec(collect(transpose(x)))
4-element Array{Int64,1}:
1
2
3
4
だと場合によっては問題があり、 Transpose
は LinearAlgebra
の操作なので、例えば Array{Char, 2}
に対しては定義されていないので実行できない。
julia> ['a' 'b';'c' 'd']
2×2 Array{Char,2}:
'a' 'b'
'c' 'd'
julia> transpose(['a' 'b';'c' 'd'])
2×2 LinearAlgebra.Transpose{Union{},Array{Char,2}}:
Error showing value of type LinearAlgebra.Transpose{Union{},Array{Char,2}}:
ERROR: MethodError: no method matching transpose(::Char)
permutedims
を使えばこの場合もOK.
julia> vec(permutedims(['a' 'b';'c' 'd']))
4-element Array{Char,1}:
'a'
'b'
'c'
'd'
3次元
julia> x = reshape([(1:24)...], 2, 3, 4)
2×3×4 Array{Int64,3}:
[:, :, 1] =
1 3 5
2 4 6
[:, :, 2] =
7 9 11
8 10 12
[:, :, 3] =
13 15 17
14 16 18
[:, :, 4] =
19 21 23
20 22 24
横方向(?)に連結する
julia> reshape(x, size(x, 1), :)
2×12 Array{Int64,2}:
1 3 5 7 9 11 13 15 17 19 21 23
2 4 6 8 10 12 14 16 18 20 22 24
縦方向(?)に連結する
julia> permutedims(reshape(permutedims(x, (2, 1, 3)), size(x, 2), :))
8×3 Array{Int64,2}:
1 3 5
2 4 6
7 9 11
8 10 12
13 15 17
14 16 18
19 21 23
20 22 24
もっと良い方法はないものか……