ジュリアで円形配列を使う方法
概要
実は、Juliaではネイティブに円形配列circular Arrayをサポートしていないが、要素を円形にcircularlyシフトしてくれるcircshift()
関数を提供していて、事実上それを使うことができる1。自分で書くのはそれほど難しくないが、知っていればわざわざ書かなくても良い。この関数はマットラボのcircshift()
とほぼ同じ方法で使える。
コード
この関数は、配列を平行移動する方法のポストでも紹介された。
基本的な使い方
julia> circshift(1:4, 1)
4-element Vector{Int64}:
4
1
2
3
julia> circshift(1:4, -1)
4-element Vector{Int64}:
2
3
4
1
circshift()
は基本的に二番目の引数に整数を入れて、要素をシフトする。上の例では、正の整数で後ろ(下)にシフトし、負の整数で前(上)にシフトすることが確認できる。
多次元配列
julia> ca = reshape(1:20, 5, :)
5×4 reshape(::UnitRange{Int64}, 5, 4) with eltype Int64:
1 6 11 16
2 7 12 17
3 8 13 18
4 9 14 19
5 10 15 20
上のような多次元配列が与えられた場合、次のように同じ次元のタプルを与えて、各次元をどれだけシフトするかを指定する。
julia> circshift(ca, (0,1))
5×4 Matrix{Int64}:
16 1 6 11
17 2 7 12
18 3 8 13
19 4 9 14
20 5 10 15
julia> circshift(ca, (-1,0))
5×4 Matrix{Int64}:
2 7 12 17
3 8 13 18
4 9 14 19
5 10 15 20
1 6 11 16
julia> circshift(ca, (-1,1))
5×4 Matrix{Int64}:
17 2 7 12
18 3 8 13
19 4 9 14
20 5 10 15
16 1 6 11
全体のコード
circshift(1:4, 1)
circshift(1:4, -1)
ca = reshape(1:20, 5, :)
circshift(ca, (0,1))
circshift(ca, (-1,0))
circshift(ca, (-1,1))
環境
- OS: Windows
- julia: v1.8.5