logo

ジュリアで無限配列を使用する方法 📂ジュリア

ジュリアで無限配列を使用する方法

概要

InfiniteArrays.jlは無限のサイズを持つ配列を使えるようにするパッケージ1で、実際にはレイジー配列と多くの関連がある。レイジー評価とは、配列に計算すべきものがなんであるかは知っているけど、本当に必要になるまでは計算を先延ばしにする方法のことだ。もちろん、コンピューターは無限を理解できないけど、この方法を使ってコンピューターでも無限配列を実装したんだ。

コード

julia> using InfiniteArrays

julia> 3141592 < ∞
true

julia> Inf == ∞
true

julia> Inf === ∞
false

InfiniteArrays.jlを読み込むと、まず 記号で無限を表せるようになる。無理にパッケージを使わなくても Infで無限を表せるけど、こっちの方が直感的に使えるようになるんだ。大小関係の比較では同じ無限の大きさを持つけど、ポインターとして見た場合は違っていて区別できる。

ℵ₀

julia> x = zeros(Int64, ∞);

julia> length(x)
ℵ₀

0でいっぱいの無限配列を作ると、これは無限可算集合になり、その大きさはアレフゼロ $\aleph_{0}$だ。

普通に使える

julia> x[2] = 3; x[94124843] = 7; x
ℵ₀-element LazyArrays.CachedArray{Int64, 1, Vector{Int64}, Zeros{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}} with indices OneToInf():
 0
 3
 0
 0
 0
 0
 0
 0
 0
 ⋮

julia> sum(x)
10

無限配列だとしても、インターフェイスが大きく変わる訳ではない。普段扱ってる配列と同様に扱えば、考えている通りに動くよ。

全コード

using InfiniteArrays

3141592 < ∞
Inf == ∞
Inf === ∞

x = zeros(Int64, ∞);
length(x)

x[2] = 3; x[94124843] = 7; x
sum(x)

環境

  • OS: Windows
  • julia: v1.7.3