logo

줄리아에서 랜덤 추출하는 방법 📂줄리아

줄리아에서 랜덤 추출하는 방법

설명1

줄리아에서 무작위 추출을 하는 함수는 다음과 같다.

  • 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