ジュリアで配列をフラット化する方法
コード
vec()
関数を使えばいい。
julia> A = rand(0:9, 3,4)
3×4 Array{Int64,2}:
6 8 7 3
2 9 3 2
5 0 6 7
julia> vec(A)
12-element Array{Int64,1}:
6
2
5
8
9
0
7
3
6
3
2
7
人間の目には、1次元配列と同じように見えるが、タイプ上では2次元配列でエラーが出るケースも、この方法で解決できる。次の2つの命令は完全に同じ配列に見えるが、$\mathbb{N}^{10 \times 1}$ 行列か $\mathbb{N}^{10 }$ ベクトルかの違いがある。
julia> b = rand(0:9, 10,1)
10×1 Array{Int64,2}:
4
8
0
4
7
4
4
2
4
7
julia> vec(b)
10-element Array{Int64,1}:
4
8
0
4
7
4
4
2
4
7
実際の flatten()
関数
実は Base.Iterators
に、本当の名前がフラッテンの flatten()
が実装されている。実行結果は以下の通りで、正直、使いたくないかもしれない。正確に言うと、配列を変えるというよりは、ループなどに入る時にイテレータiteratorsとして使う時に必要になるかもしれない。正直、必要ない。
julia> c = rand(0:9, 3,3)
3×3 Matrix{Int64}:
7 7 4
9 3 8
4 4 5
julia> Iterators.flatten(c)
Base.Iterators.Flatten{Matrix{Int64}}([7 7 4; 9 3 8; 4 4 5])
julia> vec(c)
9-element Vector{Int64}:
7
9
4
7
3
4
4
8
5
環境
- OS: Windows
- julia: v1.5.0