ジュリアでランダムに抽出する方法
説明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