logo

ジュリアで配列をフラット化する方法 📂ジュリア

ジュリアで配列をフラット化する方法

コード

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