logo

ジュリアで円形配列を使う方法 📂ジュリア

ジュリアで円形配列を使う方法

概要

実は、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