logo

ジュリアでランダムに抽出する方法 📂ジュリア

ジュリアでランダムに抽出する方法

説明1

Juliaでランダム抽出する関数は以下の通りです。

  • rand([rng=default_rng()], [S], [dims...])

rngはRandom Number Generatorの略で、乱数抽出アルゴリズムを指定します。何を意味しているのかわからなければ、触らなくても大丈夫です。

Sは(おそらく)Setの略で、ランダム抽出をする集合を指定する変数です。Sに入力可能な変数は以下のものがあります。

  • インデックスがあるオブジェクト
  • AbstractDictまたはAbstractSet
  • 文字列
  • タイプ(整数、浮動小数点のみ可能です。有理数、無理数は不可。)

抽出集合をタイプで指定した場合、整数型ならtypemin(S):type(S)の範囲から抽出します(BigIntは対応していません)。

julia> typemin(Int16), typemax(Int16)
(-32768, 32767)

julia> typemin(Int32), typemax(Int32)
(-2147483648, 2147483647)

julia> typemin(Int64), typemax(Int64)
(-9223372036854775808, 9223372036854775807)

浮動小数点なら$[0, 1)$の範囲から抽出します。

julia> rand(Float64)
0.4949745522302659

julia> rand(ComplexF64)
0.8560168003603014 + 0.16478582700545064im

[dims...]は抽出する配列の次元を表します。rand(S, m, n)ならば、集合Sの要素から(重複を含めて)$m \times n$個を抽出して$m \times n$形の配列を返します。次元を入力しなければ、実数が返されます。実数と1次元ベクトルが明確に区別されるので、注意してください。さらに、$2\times 3$形の配列を得たいと思って次元を(2,3)のようにタプルで入力すると、Sの変数として受け取られるので、全く異なる結果が出るので注意してください。

julia> rand(Float64)               # 실수 추출
0.42226201756172266

julia> rand(Float64, 1)            # 성분이 실수인 1x1 배열로 추출
1-element Vector{Float64}:
 0.7361136057571305

julia> rand(2,3)                   # 성분이 실수인 2x3 배열로 추출 
2×3 Matrix{Float64}:
 0.648742   0.364548  0.0550352
 0.0350098  0.56055   0.83297

julia> rand((2,3))                 # 2와 3중에서 추출
3

より高度な内容は次を参考にしてください。

コード

インデックスがあるオブジェクト

julia> rand((2,5))
5

julia> rand(2:5)
3

julia> rand([2,3,4,5])
4

julia> rand(["x", "y", 4])
"x"

ディクショナリ

抽出集合をディクショナリにすると、キー-値ペアPair自体が抽出されます。

julia> d = Dict(2=>4, 3=>5, 4=>"6")
Dict{Int64, Any} with 3 entries:
  4 => "6"
  2 => 4
  3 => 5

julia> rand(d)
4 => "6"

julia> rand(d)
2 => 4

文字列

抽出集合を文字列にすると、文字列内の文字の中からランダムに一つが抽出されます。

julia> str = "freshrimpsushi"
"freshrimpsushi"

julia> rand(str)
'e': ASCII/Unicode U+0065 (category Ll: Letter, lowercase)

julia> rand(str)
'h': ASCII/Unicode U+0068 (category Ll: Letter, lowercase)

タイプ

julia> rand(Int32, 3)
3-element Vector{Int32}:
  1552806175
  -384901411
 -1580189675

julia> rand(UInt32, 3)
3-element Vector{UInt32}:
 0xd2f44f99
 0x166a8b9e
 0x92fe22dc

julia> rand(Float32, 3)
3-element Vector{Float32}:
 0.59852564
 0.6247238
 0.23303497

julia> rand(ComplexF32, 3)
3-element Vector{ComplexF32}:
 0.10872495f0 + 0.6622572f0im
  0.6408408f0 + 0.46815878f0im
  0.7766515f0 + 0.73314756f0im

環境

  • OS: Windows11
  • Version: Julia 1.9.0